ための線形チャネルこの章では、スレッド間の非同期通信をサポートする、線形チャネルの実装を示します。プログラム検証を主張する良い機会でもあります。本質的にスレッド間の通信チャネルは、レースコンディションをに対して必要ななんらかの保護メカニズムで包んだキューです。容量固定のキュー、すなわち生成されたら容量が変わらないようなキューを仮定しましょう。そのキューが満杯なら、そのキューへの要素の挿入は失敗します。そのキューが空なら、そのキューからの要素の削除は失敗します。線形チャネルを実装として機能します。私は、厳密でより柔軟なプログラム検証のスタイルを示したいのです。要素を含むキューを表わします。スタンプの一種と考えることができます。ことを意味しています。ことを意味しています。end-of-fun//キューへの挿入やキューからの削除が、新しいスタンプをそのキューに割り当てていることに注意してください。呼び出すためには、そのキューが満杯ではないことを示す証明が必要です。返れば、そのような証明を獲得できます。呼び出して、そのキューが空でないことを示す証明を獲得する必要があります。持つそのインターフェイスを実際には立証していません。空のキューに呼び出されないことを保証することです。その正確さは客観的形式的に確立されたものではないからです。私自身、プログラマ中心のプログラム検証が実際にとても柔軟で効果的であることを見つけました。非形式的な数学の証明が証明された内容が正当であるかどうか検査するのに役立つと我々が信じるのであれば、プログラマ中心のプログラム検証もまた検証されたプログラムが正しいかどうか検査するのに役立つことを自然に信じることができるでしょう。それでは、スレッド間の非同期通信のための線形チャネルの実装を開始しましょう。呼び出し元はブロックします。呼び出し元はブロックします。呼び出し元がキューが満杯ではなくなるのを待つための条件変数を保持しています。呼び出されることに注意してください。背後にあるロジックは次のように説明できます。再帰的に呼び出します。フィールド中のキューに与えられた要素を挿入して返ります。ループに本質的に対応していることに注意してください。実装を導くことは単純でしょう。これは練習問題とします。ファイルはオンラインから入手できます。関数テンプレートを使ったプログラミング。