互斥鎖mutex簡單應用

2021-09-01 10:39:16 字數 1691 閱讀 4899

寫了段小**學習互斥鎖的作用。

互斥鎖的作用:在程式設計中,引入了物件互斥鎖的概念,來保證共享資料操作的完整性。

思路是用2個執行緒對同乙個記憶體位置buffer,進行寫和讀,為了防止2個執行緒同時對buffer進行修改,用同一把互斥鎖來限制。

寫操作簡化為把buffer修改為』w』,讀簡化為把buffer修改為』r』。

在對buffer進行修改之前用pthread_mutex_lock()進行加鎖,修改後pthread_mutex_unlock()解鎖。

**如下:

#include

#include

#include

void

reader_function

(void);

void

writer_function

(void);

pthread_mutex_t mtx;

//宣告互斥鎖mtx

char buffer;

intmain

(void

)void

writer_function

(void)}

void

reader_function

(void

)}

執行結果為:

進一步測試,把writer 的解鎖注釋掉,

void

writer_function

(void

)}

執行結果如下:

可見,writer 0 修改了buffer後沒有解鎖mtx,而同執行緒的writer 1在sleep之後又對mtx加鎖,造成死鎖,執行緒一直掛起,reader 也因沒辦法加鎖而一直被掛起。

再上面的基礎上把reader 的加鎖注釋掉:

void

reader_function

(void

)}

執行結果如下:

結果說明了writer 執行緒對mtx的加鎖可以在reader 執行緒裡解鎖。

再把reader裡的解鎖注釋掉:

void

reader_function

(void

)}

執行結果如下

reader現在跟互斥鎖沒關係,在writer死鎖一直掛起後,reader不受影響的執行,在這裡可以看出多執行緒程式的優點。

小結:互斥鎖可以保證同一資源在同一時間內只能被乙個執行緒使用。

使用完資源後要記得解鎖,先後呼叫2次加鎖(中間沒有解鎖)會導致死鎖,執行緒一直掛起,其他使用此鎖的執行緒也會受到影響。

a執行緒加的鎖能被b執行緒解鎖。

對未加鎖的互斥鎖進行解鎖操作沒有意義。

互斥鎖mutex的簡單實現

mutex一般用於為一段 加鎖,以保證這段 的原子性 atomic 操作,即 要麼不執行這段 要麼將這段 全部執行完畢。例如,最簡單的併發衝突問題就是乙個變數自增1 balance balance 1 表面看這是一條語句,可是在背後的彙編中我們可以看到,指令集操作過程中會引入中間變數來儲存右邊的值,...

互斥鎖mutex的簡單實現

mutex一般用於為一段 加鎖,以保證這段 的原子性 atomic 操作,即 要麼不執行這段 要麼將這段 全部執行完畢。例如,最簡單的併發衝突問題就是乙個變數自增1 balance balance 1 表面看這是一條語句,可是在背後的彙編中我們可以看到,指令集操作過程中會引入中間變數來儲存右邊的值,...

Linux應用程式互斥鎖mutex

mutex從本質上說就是一把鎖,在應用層提供對共享資源的保護訪問。1 初始化 在linux下,執行緒的互斥量資料型別是pthread mutex t。在使用前,要對它進行初始化。通過pthread mutex init進行初始化,並且在釋放記憶體 free 前需要呼叫pthread mutex de...