寫了段小**學習互斥鎖的作用。
互斥鎖的作用:在程式設計中,引入了物件互斥鎖的概念,來保證共享資料操作的完整性。
思路是用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...