Go言語100Tips ありがちなミスを把握し、実装を最適化する の No.57を読んだ。第8章 並行処理 の続き。
No.57 は、チャネルとミューテックスの使い分けについて。
ミューテックスはその資源への排他的なアクセスを保証する。
チャネルはデータの有無(chan struct()かどうか)に関わらない、伝達のための仕組み。協調や所有権の移転はチャネルを介して実現されるべき。
一般に、並列ゴルーチン間の同期はミューテックスによって達成されるべきで、並行ゴルーチンは、協調しオーケストレーションする必要がある。この連携は通信の範囲にはいるのでチャネルを使うことになる。