C 多執行緒 學習筆記(二)

2021-08-03 16:42:08 字數 2692 閱讀 2350

程序:基於程序的多工處理是程式的併發執行。

執行緒:基於執行緒的多工處理是同一程式的片段的併發執行。

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...