はじめに
Go で共有リソースへの同時アクセスを同期する場合、sync.Mutex とチャネル (chan) という 2 つの主なオプションが利用可能です。どちらも同期を達成できますが、その適合性は特定のシナリオによって異なります。
ミューテックスとチャネル
ミューテックス (sync.Mutex):
チャネル (chan):
ミューテックスを使用する場合
例:
var count int var m sync.Mutex func increment() { m.Lock() defer m.Unlock() count++ }
var ball *Ball var m sync.Mutex func player(name string) { for { m.Lock() ball.hits++ fmt.Println(name, ball.hits) time.Sleep(100 * time.Millisecond) m.Unlock() } }
var cache map[string]interface{} var m sync.Mutex func get(key string) interface{} { m.Lock() defer m.Unlock() return cache[key] }
以上がGo におけるミューテックスとチャネル: それぞれをいつ使用するか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。