gpt4 book ai didi

haskell - 为什么 MVar 不适用于 `par` ?

转载 作者:行者123 更新时间:2023-12-02 18:36:43 26 4
gpt4 key购买 nike

只是好奇。如果我使用 forkIO 生成 2 个线程,则可以使用 MVar 完成它们之间的通信。我想知道当使用使用 par 创建的并行 Haskell Spark 时是否同样适用。我知道 par 不会创建实际的线程,而只是指向可以并行发生的某些计算的指针。

以下代码编译后,main 引发以下错误:线程在 MVar 操作中无限期阻塞

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)

最佳答案

I wonder if the same apply when using parallel Haskell's spark created using par

不,这实际上不可能。 MVar 是一种显式的、非确定性的通信机制,在手动控制线程时使用。 par Spark 是一个更高级别的抽象,其中 GHC 运行时会为您处理通信。

当您尝试触发 IO 操作时,不会发生任何事情,因为触发的操作只能是纯计算。

关于haskell - 为什么 MVar 不适用于 `par` ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11350857/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com