1. 程式人生 > >golang 初體驗 - 並發與鎖.1 - sync.Mutex

golang 初體驗 - 並發與鎖.1 - sync.Mutex

info == mut ima 作用 多個 mage 核心 代碼

==== Mutex為互斥鎖,顧名思義,被Mutex鎖住的代碼同時只允許一個協程訪問,其它協程進來就要排隊

如何使用?看代碼:

技術分享圖片

輸出:

技術分享圖片

釋義:

並發1000個協程同時更改m的元素,這樣會有一部分更改成功,但是還有一部分會出現竟態,造成並發錯誤,輸出結果很明了

如何避免:

放開26行,30行便可

作用是鎖住臨界區28行,這樣就能保證28行同時只有一個協程訪問,其他協程進來得排隊,等待上一個協程釋放資源,即解鎖。

==== RWMutex為讀寫鎖

允許多個讀者訪問共享資源,但是只能有一個寫者。不能同時既有讀者又有寫者。讀者的個數和cpu核心數相關,用戶與Mutex相同

golang 初體驗 - 並發與鎖.1 - sync.Mutex