linux系統的互斥鎖機制

2021-07-25 10:44:52 字數 988 閱讀 1082

2023年12月16日 17:34:48

這兩天開始看linux下的執行緒程式設計,看到了關於互斥鎖這一塊兒,寫了乙個小例項如下

但是偶爾結果也會是這樣子的

就被掛起了,不執行向下的操作了。

最後想來了問題所在:

輸出1的那個執行緒如果先執行,輸出2的執行緒接下來執行,輸出3的執行緒最後執行。那麼到了pthread_join()**段時,就正常執行了。

可是萬一執行順序不是上述順序,那麼執行完畢實際執行的第乙個執行緒之後,主線程在等待第乙個執行緒結束,一直在阻塞主線程等待,所以互斥鎖也沒有解鎖,既然互斥鎖沒有被解鎖,那麼其他執行緒就會一直被掛起,形成死鎖。

還有個問題,關於pthread_join()一開始我以為是啟動了系統的某個執行緒使用輪詢方式在一直查詢他自己所等待的執行緒是否執行完畢。後來這個問題出現之後,感覺它的機制不是這樣子的,上網查了一下之後,說是比如:

pthread_join(pthread_no,null);

pthread_join(pthread_no1,null);

pthread_join(pthread_no2,null);

它的機制實際上是主線程一直在等待no執行緒結束,no未完成時不去理會其它的執行緒狀態,那麼這樣子的話也就能解釋通了。

linux執行緒》同步互斥機制之 互斥鎖

本文基於訊號量 如果訊號量的值最多為1,那實際上相當於乙個共享資源在任意時刻最多只能有乙個執行緒在訪問,這樣的邏輯稱為 互斥 這時,有一種更加方便和語義更加準確的工具來滿足這種邏輯 互斥鎖。幾個執行緒同時去搶乙個鎖,誰搶到了鎖就進門把房間鎖上,訪問資料,出來後之前解鎖。照這樣的邏輯,互斥鎖的操作無非...

互斥鎖機制,互斥鎖與讀寫鎖區別

互斥鎖 mutex,用於保證在任何時刻,都只能有乙個執行緒訪問該物件。當獲取鎖操作失敗時,執行緒會進入睡眠,等待鎖釋放時被喚醒 讀寫鎖 rwlock,分為讀鎖和寫鎖。處於讀操作時,可以允許多個執行緒同時獲得讀操作。但是同一時刻只能有乙個執行緒可以獲得寫鎖。其它獲取寫鎖失敗的執行緒都會進入睡眠狀態,直...

同步機制 互斥鎖

互斥鎖指代相互排斥,它是最基本的同步形式。互斥鎖用於保護臨界區,以保證任何時刻只有乙個執行緒在執行其中的 或者任何乙個時刻只有乙個程序在執行其中的 保護乙個臨界區的 的通常輪廓大體如下 lock the mutex 臨界區unlock the mutex posix互斥鎖被宣告為具有pthread ...