前回の例では、アトミックな操作 を使って、 シンプルなカウンターの状態を管理する方法を見ました。 より複雑な状態の場合は、複数のゴルーチンから安全にデータへ アクセスするために ミューテックス (mutex) を使えます。 |
|
|
|
|
|
Container は、カウンタのマップを保持します。
複数のゴルーチンから並行して更新したいので、
アクセスを同期化するために |
|
|
|
|
|
ミューテックスはゼロ値がそのまま使えるので、 ここでは初期化が不要である点に注意してください。 |
|
|
|
|
|
この関数はループを使って名前付きのカウンタをインクリメントします。 |
|
複数のゴルーチンを並行実行します。これらはすべて同じ
|
|
ゴルーチンが完了するのを待ちます。 |
|
プログラムを実行すると、カウンタが期待通りに 更新されたことが分かります。 |
|
次回は、これと同じ状態管理をゴルーチンとチャネルだけを使って 実装する例を見ていきましょう。 |
Next example: Stateful Goroutines.