Go 之鎖住共享資源

Go語言提供了傳統的同步 goroutine 的機制,就是對共享資源加鎖。如果需要順序訪問一個整型變量或者一段代碼,atomic 和 sync 包里的函數提供了很好的解決方案。

1.原子函數

?原子函數能夠以很底層的加鎖機制來同步訪問整型變量和指針。

運行結果

這個程序使用了 atomic 包的 AddInt64 函數。這個函數會同步整型值的加法,方法是強制同一時刻只能有一個 goroutine 運行并完成這個加法操作。當 goroutine 試圖去調用任何原子函數時,這些 goroutine 都會自動根據所引用的變量做同步處理。

2.互斥所

另一種同步訪問共享資源的方式是使用互斥鎖(mutex)。互斥鎖用于在代碼上創建一個臨界區,保證同一時間只有一個 goroutine 可以執行這個臨界區代碼。

//這個示例程序展示如何使用互斥鎖來定義一段需要同步訪問的代碼臨界區。

//資源的同步訪問

運行結果:

對 counter 變量的操作使用 Lock() 和 Unlock() 函數調用定義的臨界區保護起來。使用大括號并不是必須的,只是為了讓臨界區看起來更清晰。同一時刻只有一個 goroutine 可以進入臨界區。之后,直到調用 Unlock() 函數之后,其他 goroutine 才能進入臨界區。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容