Haskellで特定のスレッドをウェイクアップする方法はありますか?現在のスレッドを一時停止する機能があります。しかし、目覚めている相手は存在しないようです。
1 に答える
7
yield
現在のスレッドを一時停止しません-実行キューの最後に移動します。それはまだ実行キューにあり、他の実行可能なスレッド(複数の実行コンテキストが定義されている場合、すべての実行可能なスレッドではない可能性があり、これはかなり弱い保証になります)が続行する前に実行される機会があることを確認します。ほとんどの場合、無視する必要がありますyield
。例外は、それが何をするのか、そしてなぜそれが重要なのかを正確に理解している場合です。
実際にスレッドを一時停止して再開するには、MVar
sが最適です。スレッドが空を待機するとMVar
、実行可能なキューから削除されます。値がに入れられると、その値をMVar
待機しているスレッド(GHCは常にMVar
最も長く待機しているスレッドであると信じていますが、保証されていません)は実行可能キューに戻されます。
于 2012-11-18T18:33:37.650 に答える