linux下多執行緒程式設計入門(三)

2021-10-23 15:37:07 字數 1155 閱讀 5478

前面兩節粗略學習了一下多執行緒程式設計,這一節我們來了解一下鎖的概念。

由於多執行緒之間是併發執行的,而系統排程又是隨機的,因此在寫多執行緒程式時會出現很多問題,這時就免不了要用到各種鎖機制來保證執行緒安全且按我們的意願正確執行。

當多個執行緒同時讀寫同一塊**區的時候,就出現很多問題。

比如初始i=0;我們希望執行緒1和執行緒2各執行一次i++;理想結果是i=2;

但是執行緒1執行 i++; 此時應該 i=1;

但是執行緒2正好同時讀取到了i=0;自加後i=1;然後把i=1複製給i。

這不是我們希望看到的 這時候我們就要用到鎖。

#include

#include

#include

int s=0;

void

*test

(void

* args)

intmain()

如同上面這段**,理想情況下s=200000;但是輸出結果相差很大,而且每次都不一樣,這和cpu的狀態有關。

就好比廁所單間,乙個人進入鎖上門後,使用完廁所,出來之後,另乙個人才能進入。

鎖就是當乙個 執行緒讀寫一段**塊時,給這段**塊上鎖,不允許其他執行緒訪問,其他執行緒要先在外面等待。

#include

#include

#include

int s=0;

pthread_mutex_t lock;

//定義互斥鎖 lock

void

*test

(void

* args)

}int

main()

執行結果

但是這個**重複的上鎖解鎖,**執行時間會變慢很多。

可以使用 time ./test1檢視執行時間

Linux系統下的多執行緒程式設計入門三

執行緒的資料處理 和程序相比,執行緒的最大優點之一是資料的共享性,各個程序共享父程序處沿襲的資料段,可以方便的獲得 修改資料。但這也給多執行緒程式設計帶來了許多問題。我們必須當心有多個不同的程序訪問相同的變數。許多函式是不可重入的,即同時不能執行乙個函式的多個拷貝 除非使用不同的資料段 在函式中宣告...

linux下多執行緒程式設計入門(二)

上一節中,從輸出的數字分布,可以看出是 多執行緒輪流執行的,但是我們並不知道對應數字是哪乙個執行緒輸出的,這一節我們通過學習往執行緒中傳引數 以此區分執行緒。include include include void test void args 傳入的引數是 void 型別 intmain 輸出結果...

Linux下的多執行緒程式設計(三)

下面先來乙個例項。我們通過建立兩個執行緒來實現對乙個數的遞加。或許這個例項沒有實際運用的價值,但是稍微改動一下,我們就可以用到其他地方去拉。下面是我們的 thread example.c c multiple thread programming in linux author falcon e m...