go語言多執行緒入門筆記-執行緒同步

hongmingover發表於2018-11-02

go語言多執行緒入門筆記-執行緒同步

2018年09月18日 21:31:00 八段 閱讀數:24

版權宣告:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/hehuii/article/details/82749905

執行緒同步類似於搶凳子的遊戲,只有鎖定了資源的執行緒才能夠進入臨界區,所以執行緒必須要想方設法的去鎖定資源。

下圖說明了鎖定資源的步驟:

下圖說明了,如何使用條件變數來防止死鎖:

多執行緒程式設計中兩個重要同步工具:互斥量實現對臨界區的保護,阻止競態條件的發生。條件變數作為補充手段,讓多方協調更有效率。

執行緒安全性
讓函式具有執行緒安全性的最有效方式就是使其可重入(reentrant)。通俗的講,如果多個執行緒併發呼叫該函式,與他們呼叫的順序無關,產生的結果總是相同的,即為一個可重入函式。反之,如果一個函式把共享資料作為它的返回結果或者包含在返回結果裡,那麼該函式肯定不是一個可重入函式。

多執行緒與多程式
多執行緒程式設計因為執行緒之間可以方便簡單的交換資料,相比多程式有優勢。併發執行和並行執行是不同的,併發執行僅僅是兩個執行緒並行執行,同一時刻不一定都處於執行狀態,並行執行是同一時刻都在執行,必要條件是多核或者多CPU

提供效率要做到:
避免長時間持有互斥量
優先使用原子操作而不是互斥量

相關文章