只是好奇。如果我有使用forkIO
產生的2個線程,它們之間的通信可以使用MVar
來完成。我不知道在使用使用par
創建的並行Haskell的火花時是否同樣適用。據我所知,par
不會創建實際的線程,而只是指向可以並行發生的某些計算的指針。爲什麼MVar不能與`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)
謝謝。只是引發行動的部分可以是純粹的幫助! :) – vis 2012-07-05 20:26:48
此外,即使你在spark中的unsafePerformIO,火花不會充當垃圾收集的根源,並且可能會被丟棄,所以檢查完全在其權限範圍內,找不到潛在的作者。 – 2012-07-05 21:23:39