Dev Study
Go コース

52. sync.Mutex — 共有データを排他制御で守る

複数の goroutine が同じ変数を同時に書き換えると、結果が壊れる「データ競合」が起きます。sync.Mutex(相互排他ロック)は、ある一瞬に1つの goroutine だけがその領域に入れるようにする錠前です。Lock() でロックを取り、Unlock() で解放します。

Lock と Unlock の間(クリティカルセクション)に共有データの読み書きをまとめると、同時アクセスが直列化されて競合がなくなります。Unlock の呼び忘れはデッドロックの原因になるので、defer mu.Unlock() と書くのが安全です。

下の例では1000個の goroutine がそれぞれカウンタを1ずつ増やします。Mutex で保護しているため加算が失われず、合計は必ず 1000 になります。

▶ サンプルコードを実行してみよう(自由に書き換えてOK)

Go
公式ドキュメントで詳しく ↗