Linux多執行緒程式設計 執行緒互斥鎖

2021-10-05 21:18:10 字數 1212 閱讀 1955

通過下面的練習加深對執行緒的概念的理解,同時明確執行緒的控制。從而進一步了解執行緒的互斥,並學會利用pthread庫。

定義乙個用於互斥的互斥鎖、和乙個主函式和兩個子執行緒都能訪問的共享變數,乙個主函式和兩個用來建立子執行緒的子函式;在主函式中定義兩個子執行緒id的變數,初始化互斥鎖,建立對應函式的子執行緒,等待兩個子執行緒執行結束,獲取並列印共享變數的結果,銷毀互斥鎖並返回退出。

#include

#include

#include

#include

pthread_mutex_t mutex = pthread_mutex_initializer;

int value =0;

void

*fun

(void

* arg)

intmain

(int argc,

char

const

*ar**)

pthread_create

(&threadid2,

null

, fun,

null);

if(error)

sleep(2

);pthread_mutex_destroy

(&mutex)

;return0;

}

value =

1value =

2

去掉子執行緒對應函式中的互斥控制語句,並用sleep()控制子執行緒的不同併發過程,觀察實驗結果。

void

*fun

(void

* arg)

執行結果:

value =

1value =

1

分析:因為sleep()在共享變數修改前,使得想要修改value的子執行緒阻塞一會,兩個子執行緒中區域性變數獲取的共享變數都是初值,所以列印結果都為1。

void

*fun

(void

* arg)

執行結果:

value =

2value =

2

分析:因為sleep()在共享變數修改之後,在列印結果之前,兩個子執行緒都修改了共享變數,所以最後的列印結果都為2。

多執行緒程式設計 互斥鎖

多執行緒程式設計 互斥鎖 1 引言 互斥鎖,是一種訊號量,常用來防止兩個程序或執行緒在同一時刻訪問相同的共享資源。可以保證以下三點 1 原子性 把乙個互斥量鎖定為乙個原子操作,這意味著作業系統 或pthread函式庫 保證了如果乙個執行緒鎖定了乙個互斥量,沒有其他執行緒在同一時間可以成功鎖定這個互斥...

linux多執行緒程式設計之互斥鎖

執行緒的同步問題 乙個程序中的多個執行緒是共享同一段資源的,由於執行緒對資源的競爭引出了鎖。其中mutex是一種簡單的加鎖方法,這個互斥鎖只有兩種狀態,那就是上鎖和解 鎖,可以把互斥鎖看作是某種意義上的全域性變數。在某一時刻,只能有乙個執行緒取得這個互斥上的鎖,擁有上鎖狀態的執行緒可以對共享資源進行...

Linux多執行緒互斥鎖

多執行緒程式設計中,多執行緒程式設計 可以用互斥鎖 也稱互斥量 可以用來保護關鍵 段,以確保其獨佔式的訪問,這有點像二進位制訊號量。posix互斥鎖相關函式主要有以下5個 cpp view plain copy include intpthread mutex init pthread mutex ...