4

Haskellで特定のスレッドをウェイクアップする方法はありますか?現在のスレッドを一時停止する機能があります。しかし、目覚めている相手は存在しないようです。

4

1 に答える 1

7

yield現在のスレッドを一時停止しません-実行キューの最後に移動します。それはまだ実行キューにあり、他の実行可能なスレッド(複数の実行コンテキストが定義されている場合、すべての実行可能なスレッドではない可能性があり、これはかなり弱い保証になります)が続行する前に実行される機会があることを確認します。ほとんどの場合、無視する必要がありますyield。例外は、それが何をするのか、そしてなぜそれが重要なのかを正確に理解している場合です。

実際にスレッドを一時停止して再開するには、MVarsが最適です。スレッドが空を待機するとMVar、実行可能なキューから削除されます。値がに入れられると、その値をMVar待機しているスレッド(GHCは常にMVar最も長く待機しているスレッドであると信じていますが、保証されていません)は実行可能キューに戻されます。

于 2012-11-18T18:33:37.650 に答える