Go

Goでチャネルにブロードキャストするにはcloseを使う

More than 3 years have passed since last update.

クローズされたチャネルはゼロ値が常に送られてくるチャネルのように振る舞うので、これを利用して、チャネルの受信側に一斉通知するためにcloseを使うことができる。

チャネルがクローズされるとそのチャネルで待っているgoroutine(複数でも良い)は一斉にアンブロックされてゼロ値を受け取ることになる。

ブロックしているgoroutineの数だけ通常の値を送って全員を起こしてもよいけど、それだと何個のgoroutineが待っているのかという知識が必要になってしまうし、数え終わった後、かつ値を送る前に、ブロックしているgoroutineが増えるといけないので排他制御も必要になってしまう。これに対してチャネルをクローズする方法はただクローズすればよいだけなので使うのが簡単。