ミューテックスとチャネルを選択する場合
Golang は同時プログラミング用に sync.Mutex とチャネルの両方を提供し、開発者に決定を提示しますさまざまなシナリオでどのツールを使用するか。
Mutex とChannel
ミューテックスの使用
ミューテックスは次のような状況に最適です。
例
1.シンプル カウンター:
ミューテックスを使用して、一度に 1 つのゴルーチンのみがカウンターをインクリメントするシンプルなカウンターを実装できます。
import "sync" var counter int var m sync.Mutex func incrementCounter() { m.Lock() counter++ m.Unlock() }
2.ピンポン ゲーム:
チャネルはピンポン ゲームによく使用されますが、ミューテックスは共有ボール オブジェクトへのアクセスを保護することで同じ機能を実現できます。
import "sync" type Ball struct { hits int } var ball Ball var m sync.Mutex func player1() { for { m.Lock() ball.hits++ fmt.Println("Player 1:", ball.hits) m.Unlock() } }
3.シンプル キャッシュ:
ミューテックスを使用すると、内容へのスレッドセーフなアクセスを備えたシンプル キャッシュを実装できます。
import "sync" type Cache struct { m map[string]interface{} mu sync.Mutex } func (c *Cache) Get(key string) interface{} { c.mu.Lock() defer c.mu.Unlock() return c.m[key] }
ミューテックスとチャネルの選択
ミューテックスとチャネルのどちらを選択するかは、タスクの特定の要件によって異なります。ミューテックスは、競合状態を防止し、共有データへのスレッドセーフなアクセスを確保することが最重要であるシナリオに適しています。一方、チャネルはゴルーチン間の通信とデータ共有に優れています。
以上がミューテックスとチャネル: いつどちらを選択すべきですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。