A Tour of Go in Haskell

GitHub Language
Channels

チャネルは値が一方向にだけ流れる管です。 値はチャネルの末尾に追加され、先頭から取り出さます。

writeChan ch v // v をチャネル ch の末尾に追加する
readChan ch    // チャネル ch の先頭から値を取り出す

チャネルは使う前に作っておく必要があります。

newChan

ひとつのチャネルへの書き込みと読み出しは異なる複数のスレッドから行うことができます。 もしチャネルが空のときに readChan しようとしても、 それはエラーにはならず、単に値が来るまで停止(ブロック)します。 この挙動によって複数のスレッドの歩調を合わせることができます。

サンプルコードは軽量スレッドに Int リストの合計を計算させています。 軽量スレッドの計算結果が出揃うのを待ち、メインスレッドでそれらを使います。

stm パッケージは別のチャネル実装を提供します。stm については後ほど説明します。 今は stm を実行するには atomically 関数を使うとだけ覚えておいてください。

< 2 / 11 >