【问题标题】:Thread blocked indefinitely - Haskell - Acid State线程无限期阻塞 - Haskell - Acid State
【发布时间】:2012-05-14 13:36:04
【问题描述】:

我担心 Acid State 会生成许多事件文件和检查点,用户“stepcut”告诉我在 acid 中有一个名为 createArchive 的解决方案的实现,它会删除旧事件...... 问题是当我使用它时出现此错误:

<fileName.exe>: thread blocked indefinitely in an MVar operation

我认为它应有 w7 权限,但是当我在“管理员”下运行它时,我无法看到控制台,但事件文件仍然存在,所以我认为它不起作用。

如果我通过 ghci 运行代码,我不会收到错误,但它会锁定控制台,所以我需要 CtrlC 才能继续工作。

有人收到这个错误吗?

【问题讨论】:

  • 可能与 GHC 7.4.1 中的错误有关:hackage.haskell.org/trac/ghc/ticket/5943
  • 它说它是固定的,所以如果我下载 haskell 平台,我应该可以使用它,对吧!谢谢
  • @Iliax,我怀疑最新的 Haskell 平台是否有 7.4.2。它的发布周期比 GHC 更长。
  • 7.4.2 还没有发布!您必须等待一段时间才能广泛使用此修复程序。这与权限无关,这是肯定的。
  • 如果我给出的答案不起作用,您可能需要提供更多信息——您是否在进行优化时进行编译?您使用的是哪个版本的acid-state?您能否提供您的代码,或者更好的是产生相同错误的较小程序?

标签: haskell acid


【解决方案1】:

这当然与权限无关。当尝试从没有人可以写入的空MVar 中读取,或者类似地尝试将一个值放入已经满且不会被清空的MVar 时,就会出现错误。这意味着某人的代码中存在错误。

如果 vivian(在 cmets 中)关于这与 this GHC bug 的关系是正确的,那么 this related bug 建议使用 -fno-state-hack 编译可能足以解决您的问题。看起来该错误至少从 GHC 7.2.2 开始就存在,但在(迄今为止未发布的)GHC 7.4.2 中已修复。

或者,它可能只是acid-state 中的一个错误,它似乎大量使用了MVars。在这种情况下,您应该确保您使用的是最新版本的库,然后尝试生成一个简单的测试用例,以便其他人可以验证问题。

【讨论】:

  • 这不起作用,虽然我不明白相关的错误 u.u
  • 我把答案扩展了一点;另请参阅我对您的问题留下的评论。如果不是 GHC 错误,很可能是 acid-state 错误,但没有更多信息很难判断。
【解决方案2】:

在我编译我的程序没有优化后,这个错误从我的程序中消失了,如ghc --make -O0 Main

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-13
    • 1970-01-01
    • 1970-01-01
    • 2012-11-08
    • 2020-05-16
    • 1970-01-01
    • 2015-12-04
    相关资源
    最近更新 更多