程序:基於程序的多工處理是程式的併發執行。
執行緒:基於執行緒的多工處理是同一程式的片段的併發執行。
c++ 多執行緒寫法,從入門開始,一點點往下寫,我也不知道能學到精通還是到放棄。
根據主流的一些部落格技術文件,循序漸進,適於新手入門。
首先第乙個程式是直接使用多執行緒建立函式建立多個執行緒。
編譯的時候需要靜態鏈結庫檔案pthread ,使用命令 g++ -o target target.cpp -lpthread 其中-lpthread 編譯選項到位置可任意,
#include #include using namespace std;
#define num_threads 5
void* say_hello(void* args)//必須使用指標,因為執行緒建立函式這樣要求的。
int main()
}//等各個執行緒退出後,程序才結束,否則程序強制結束了,執行緒可能還沒反應過來;
pthread_exit(null);
}
注意: pthread_exit()函式會直接導致整個main函式結束。感覺上相當於return。
執行結果為:
hello thread !
hello thread !
hello thread !
hello thread !
hello thread !
#include #include #include using namespace std;
#define num_threads 5
void *printhello(void *threadid)
int main ()
}pthread_exit(null);
}
編譯的時候命令為:
g++ -o test1 test1.cpp -lpthread
執行三次 結果分別為:
main() : 建立的執行緒0
main() : 建立的執行緒1
hello thread! 來自執行緒0
main() : 建立的執行緒2
hello thread! 來自執行緒1
main() : 建立的執行緒3
hello thread! 來自執行緒2
main() : 建立的執行緒4
hello thread! 來自執行緒3
hello thread! 來自執行緒4
main() : 建立的執行緒0
main() : 建立的執行緒1
hello thread! 來自執行緒0
main() : 建立的執行緒2
hello thread! 來自執行緒1
main() : 建立的執行緒3
hello thread! 來自執行緒2
main() : 建立的執行緒4
hello thread! 來自執行緒3
hello thread! 來自執行緒4
main() : 建立的執行緒0
main() : 建立的執行緒1
main() : 建立的執行緒2
hello thread! 來自執行緒1
main() : 建立的執行緒3
hello thread! 來自執行緒0
hello thread! 來自執行緒2
main() : 建立的執行緒4
hello thread! 來自執行緒3
hello thread! 來自執行緒4
可以發現,並沒有一定的順序和規律。
稍作調整,加入 pthread_join()函式,相關介紹為 「**中如果沒有pthread_join主線程會很快結束從而使整個程序結束,從而使建立的執行緒沒有機會開始執行就結束了。加入pthread_join後,主線程會一直等待直到等待的執行緒結束自己才結束,使建立的執行緒有機會執行。」所以將**更改如下為:
#include #include using namespace std;
#define num_threads 5
void *printhello(void *threadid)
int main ()
pthread_join( threads[i], null );
}}
在迴圈中加入join函式,會使程式執行變得有序。因此,執行結果為:
main() : 建立的執行緒0
hello thread! 來自執行緒0
main() : 建立的執行緒1
hello thread! 來自執行緒1
main() : 建立的執行緒2
hello thread! 來自執行緒2
main() : 建立的執行緒3
hello thread! 來自執行緒3
main() : 建立的執行緒4
hello thread! 來自執行緒4
總結一下:
基於以上**主要學習了pthread_t 表示執行緒識別符號,pthread_create()函式用來進行執行緒的建立,pthread_exit()函式進行所有的執行緒的終止。pthread_join()函式進行執行緒的阻塞,保證在主線程結束之前所有建立的新的執行緒按照迴圈的順序執行。
C 多執行緒學習筆記二
記憶體欄柵 variable var thread t1,t2 1 t1,t2 共享var public 有 鎖 的問題 2 t1,t2 各自有乙個var internal 沒有鎖爭用的問題 var slot thread.allocatedataslot username 主線程上設定槽位,也就是...
多執行緒學習筆記二
傳統執行緒 time 下午06 15 19 author retacn yue email zhenhuayue sina.com public class traditionalthread catch interruptedexception e system.out.println threa...
多執行緒學習筆記(二)
上一節講到lock鎖,還有一種鎖就是monitor 監視器 區別lock鎖對鎖定的物件一直要等當前程序全部處理完才能讓其他程序進入。monitor鎖可以程式控制解鎖,只是在程序進行某一部分運算時進行上鎖,等執行結束時可以解鎖供其他程序進行運算 注 錯誤 從不同步的 塊中呼叫了物件同步方法 原因一 m...