条件変数
スレッド 間の同期を行うための機能の 1 つ
特定の条件が満たされるまでスレッドを待機させるために用いられる
この待機することを パーキング と呼ぶ
mutex と組み合わせて利用することで、共有リソースの安全なアクセスを制御する
e.g.
Go: sync.Cond を用いることで実現できる
Wait()
呼び出されると、関連付けられたロックを解放して待機する
他の ゴルーチン が Signal() または Broadcast() を呼び出して通知すると、待機中のゴルーチンはロックを再取得して再開する
warning.icon mutex の解放とゴルーチンを一時停止する操作は アトミック に行われる
Signal()
Wait でブロックしているゴルーチンがあれば、そのうち 1 つを再開させる
Broadcast()
Wait で待機しているすべてのゴルーチンを再開させる
warning.icon mutex を得られるゴルーチンは 1 つだけ であり、そのゴルーチンが mutex を解放するまで他のゴルーチンは mutex を獲得待ちのまま
#並列処理