1. 程式人生 > 其它 >【Golang】關於Go語言中的鎖

【Golang】關於Go語言中的鎖

在 Golang 裡有專門的方法來實現鎖,就是 sync 包,這個包有兩個很重要的鎖型別
一個叫 Mutex, 利用它可以實現互斥鎖。一個叫 RWMutex,利用它可以實現讀寫鎖。

互斥鎖:Mutex

概念:使用互斥鎖(Mutex,全稱 mutual exclusion)是為了來保護一個資源不會因為併發操作而引起衝突導致資料不準確。

使用Mutext鎖雖然很簡單,但是仍然有幾點需要注意:
- 同協程中,不要在尚未解鎖時再次使用加鎖
- 同協程中,不要對已解鎖的鎖再次解鎖
- 加了鎖後,別忘了解鎖,必要時使用defer語句

讀寫鎖:RWMutex

概念:是最簡單的一種鎖型別,他提供了一個傻瓜式的操作,加鎖解鎖加鎖解鎖,讓你不需要再考慮其他的。簡單 同時意味著在某些特殊情況下有可能會造成時間上的浪費,導致程式效能低下。另外RWMutex提供了兩種鎖,每種鎖分別對應兩種方法,為了避免死鎖,兩個方法應成對出現,必要時請求使用defer

  • 讀鎖:呼叫RLock方法開啟鎖,呼叫RUlock釋放鎖
  • 寫鎖:呼叫Lock方法開啟鎖,呼叫Unlock釋放鎖
關鍵點:
- 為了保證資料的安全,它規定了當有人還在讀取資料(即讀鎖佔用)時,不允許有人更新這個資料(即寫鎖會阻塞)
- 為了保證資料的安全,多個人(協程)讀取資料時(擁有讀鎖)時,互不影響不會造成阻塞,它不會想Mutext那樣只允許有一個人(協程)讀取同一個資料