【发布时间】:2011-10-14 15:34:17
【问题描述】:
我正在为一项作业编写报告,其中我使用 STM 包实现了并发多核分支定界算法,但遇到了一个问题。
使用 STM 的实现显然在 IO monad 中,因为它同时使用 STM 的“原子”和 Concurrent 的“forkIO”,但它是确定性的。尽管使用了共享内存变量,对于相同的输入,函数的最终结果总是相同的。
我的问题是,在退出 IO 时,除了“unsafePerformIO”之外,我还有哪些选择?我是否应该尝试将其从 IO monad 中取出,因为使用多个内核可能会影响其他没有相同确定性保证的并发代码。
我听说过 Par monad 包(虽然没有使用它),但是 IO monad 中存在 STM,为了获得线程安全的全局变量,我唯一可以替代 STM 的方法是 MVars(我知道),也存在于 IO monad 中。
【问题讨论】:
-
Parmonad 中的线程安全全局变量是IVars。
标签: haskell concurrency monads parallel-processing stm