當多個執行緒(Go 中的go 程式)需要存取和修改共享記憶體時,同步至關重要。同步機制可防止競爭條件和資料不一致。在 Go 中,sync 和atomic 套件為此目的提供了各種鎖定原語。
RWMutex(讀寫互斥體)是控制對共享的存取的同步原語資料。與標準 Mutex 不同,RWMutex 允許多個執行緒同時讀取相同的數據,同時限制一次只能對一個執行緒進行寫入存取。
s.countersLock.RLock(),呼叫時,鎖定 s 接收器內的計數器欄位。這意味著其他執行緒也可以同時取得計數器上的讀鎖,而不會阻塞。
s.countersLock.RLock() 只鎖定 counters 字段,留下平均值字段已解鎖。這允許其他線程不受干擾地訪問和修改平均值字段。
RWMutex 是 Go 常用的同步機制。雖然通道在並發管理方面有其優勢,但當多個執行緒需要並發讀取和偶爾寫入相同資料時,RWMutex 適合保護共享記憶體。
atomic.AddInt64是一種原子操作,以原子方式將值加到整數,確保操作會以單一單元發生。這可以防止更新共享變數時的競爭條件和資料損壞。
在此範例中,計數器在加法操作之前解鎖,以允許其他執行緒存取和修改計數器同時進行。如果鎖保持到添加之後,它將不必要地阻塞其他嘗試增加計數器的執行緒。
以上是Go 的 RWMutex:什麼時候應該使用它而不是其他同步原語?的詳細內容。更多資訊請關注PHP中文網其他相關文章!