小编the*_*ent的帖子

惰性求值如何与 MVars 相互作用?

假设我有多个线程正在读取文件,并且我想确保在任何时间点只有一个线程正在读取文件。

实现这一点的一种方法是使用 anmvar :: MVar ()并确保互斥,如下所示:

thread = do
   ...
   _ <- takeMVar mvar
   x <- readFile "somefile"  -- critical section
   putMVar mvar ()
   ...
   -- do something that evaluates x. 
Run Code Online (Sandbox Code Playgroud)

以上在严格的语言中应该可以正常工作,但是除非我遗漏了什么,否则我可能会在 Haskell 中遇到这种方法的问题。特别是,由于x线程退出临界区后才进行评估,在我看来,只有在线程执行才会读取该文件putMVar,这首先违背了使用 MVars 的意义,因为多个线程可能会读取同时存档。

我所描述的问题是否真实,如果是,我该如何解决?

haskell

6
推荐指数
1
解决办法
92
查看次数

标签 统计

haskell ×1