このコードは、バッファードチャネルを使用してGo言語でセマフォの実装を示しています。セマフォは、最大10個の同時プロセスを許可するために、10の容量で作成されます。main関数は、各反復で整数をセマフォチャネルに送信します。如果チャネルが満杯になると、ループはチャネルから値が解放されるまでブロックされます。各反復では、新しいゴルーチンが開始され、開始メッセージを印刷し、0から20秒のランダムな時間.sleepします。ゴルーチンが完了すると、セマフォチャネルから値を解放し、次の反復に対応可能になります。値の解放は、`<- sem` ステートメントで行われ、チャネルに送信されたオリジナルの値も取得されます。プログラムは、各プロセスの開始および終了メッセージを印刷し、プロセスIDと完了にかかった時間も含みます。出力結果は、最大10個のプロセスが同時に実行されていることを示しています。プログラムは、`time` および `math/rand` パッケージを使用して、スリープ時間にランダム性を導入しています。
dev.to
Implement semaphore in golang by buffered channel
Create attached notes ...
