只是好奇。如果我有 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)