6

Haskellの2つの別々のスレッドで2つの長時間実行プロセスを計算したいとします。しかし、私は最初に行われた結果だけを気にします。どうすればいいですか?

例(擬似コード):

thread1 = spark $ long_running some_arg1
thread2 = spark $ long_running some_arg2
result = first_done thread1 thread2 -- Maybe even first_done [thread1, thread2]?
4

3 に答える 3

17

非同期パッケージはこれを行い、Haskellプラットフォームの一部になりました。

import Control.Concurrent.Async
import Control.Concurrent (threadDelay)

main :: IO ()
main = do
  x <- async (threadDelay 2000000 >> return 1)
  y <- async (threadDelay 1000000 >> return 2)
  (_, res) <- waitAnyCancel [x, y]
  print (res :: Int)
于 2012-12-31T20:28:29.513 に答える
3

実行時間の長いスレッドを強制終了する場合は、次を使用できます:http: //hackage.haskell.org/package/unamb

それ以外の場合は、una​​mbと同じことを実行できますが、killThreadは省略します。

于 2012-12-31T20:23:27.920 に答える
2

IOスレッドを使用する場合は、最新のparallel-ioパッケージ、特にparallelFirstを使用することもできます。

于 2013-01-01T12:19:33.320 に答える