gcc編譯多線程
Ⅰ gcc糾錯,一個有錯誤的多線程求孿生素數的c程序,20小時之內解決追加懸賞分
~~ 能不能把你的問題再說清楚一點? 我跑你的程序 我看到輸出了。我看你程序就只有一個printf()函數~~
unsigned int size = ((totbits / 32)) + 1;
bitArray = malloc((sizeof(unsigned int)) * size);
這兩條語句是不是應該寫在 while()循環的後面?否則你的數大於1000就會出現段錯誤了
你編譯的時候有加多線程連接選項嗎? 要加上 -lpthread 或者 -pthread (盡量選後者)
例如 gcc -pthread -o test main.cpp
另外你的線程創建的不對,函數指針不能強轉類型(這里也不用轉)
pthread_create(&procter_t,NULL,(void*)procter_f,NULL);
pthread_create(&consumer_t,NULL,(void*)consumer_f,NULL);
應該是
pthread_create(&procter_t,NULL,procter_f,NULL);
pthread_create(&consumer_t,NULL,consumer_f,NULL);
Ⅲ 用gcc怎麼編譯多線程程序 最好寫出命令來
果已經寫好了源文件,那麼cd進所在的目錄gccfilename.c-ofilename./filename
Ⅳ 現在用gcc編譯出來的程序能在多個核的cpu上一起跑嗎還是只能在一個核上跑
gcc編譯出來的程序能在多個核的cpu上一起跑,也可以在一個核心上執行——至少MinGW開發的多線程程序在Win2003的確如此。
國外很早就有人研究多核心進程調度問題,國內研究的人似乎不普遍。
Ⅳ LINUX中GCC支持C++線程嗎如果支持那麼C++的線程庫是什麼
#include <thread> // GCC 4.7
#include <thread> // VC++11.0
#include <thread>
#include <iostream>
int main() {
std::thread t1([]() {
std::cout << "Hello," << std::endl;
});
std::thread t2([]() {
std::cout << "Fuck" << std::endl;
});
t1.join();
t2.join();
system("pause");
}
Ⅵ gcc編譯線程程序,為什麼要加-lpthread,頭文件已經包含了<pthread.h>了啊
-lpthread是鏈接庫,
<pthread.h>只有申明,實現部分都在庫裡面。
創建線程時一般是把函數的指針做參數,所以要加一個取地址符號。
ret=pthread_create(&id,NULL,(void *)&thread,NULL);
另外,建議要檢查一下創建線程的返回值ret是否成功,防止影響後面的代碼。
(6)gcc編譯多線程擴展閱讀:
每個語言編譯器都是獨立程序,此程序可處理輸入的原始碼,並輸出組合語言碼。全部的語言編譯器都擁有共通的中介架構:一個前端解析符合此語言的原始碼,並產生一抽象語法樹,以及一翻譯此語法樹成為GCC的暫存器轉換語言〈RTL〉的後端。
編譯器最佳化與靜態程序碼解析技術(例如FORTIFY_SOURCE,一個試圖發現緩沖區溢位〈buffer overflow〉的編譯器)在此階段應用於程序碼上。最後,適用於此硬體架構的組合語言程序碼以Jack Davidson與Chris Fraser發明的演算法產出。
Ⅶ gcc 編譯選項 -pthread -lpthread 異同
-pthread 比 -lpthread 多了一個宏定義 -D_REENTRANT
對於多線程程序來說這個宏非常重要,這個宏會讓libc和一些其他庫,自動選擇線程安全的函數實現(很多函數有線程安全和不安全的2種實現版本)
所以建議使用-pthread 或者加上 -D_REENTRANT.
Ⅷ 如何用gcc在linux下編譯多線程c語言程序
如果已經寫好了源文件,那麼cd進所在的目錄gccfilename.c-ofilename./filename
Ⅸ 關於openmp 多線程能不能不用gcc
openmp默認使用schele取決於編譯器實現gcc默認使用schele(dynamic,1)態調度並且塊1程序面種調度及其低效看代碼都能預期太能比單線程快
態調度種簡單理解式計算任務存任務隊列面for循環每i值應計算任務每線程每提取批任務計算批少呢前面說塊程序面1提取任務需要操作呢任務隊列線程共享提取任務前必須加鎖讀取批隊列移除解鎖說應該已經知道原
線程提取計算任務任務完快所16線程排著隊逐加鎖搶任務解鎖讓其線程繼續搶馬發現任務快要重新排隊等任務始終處於飢餓狀態注意排隊候能要佔cpu使用busy wait所能看十六核滿負荷其實啥沒干
我建議使用static schele或者增加dynamic schele塊比1024取決於循環少般知道每循環執行間基本都並且專用伺服器設置affinity其負荷oversubscriptionnuma問題static schele比較選擇每線程做哪些任務需要進行配化openmp本身消耗
Ⅹ c的多線程實現
1.pthread(Posix thread)
2.Sort of.