ちょっと興味があるんだけど。を使用して 2 つのスレッドを生成した場合forkIO
、それらの間の通信は を使用して行うことができますMVar
。を使用して作成された並列 Haskell の spark を使用する場合にも同じことが適用されるのだろうかpar
。par
実際のスレッドを作成するのではなく、並行して発生する可能性のある計算へのポインターを作成することを理解しています。
次のコードをコンパイルするとmain
、次のエラーが発生します: thread blocked indefinitely in an MVar operation
.
t1 a = putMVar a "Hi"
t2 a = do
v <- takeMVar a
print v
main1 = do
a <- newEmptyMVar
forkIO (t1 a)
forkIO (t2 a)
main = do
a <- newEmptyMVar
(t1 a) `par` (t2 a)