【问题标题】:Haskell STM : How to implement Obstruction Free STM using Haskell? [closed]Haskell STM:如何使用 Haskell 实现 Obstruction Free STM? [关闭]
【发布时间】:2015-01-16 09:53:03
【问题描述】:

我想使用 Haskell 实现 Obstruction Free STM (OFTM) 来对各种可用的争用管理策略进行基准测试。 例如,事务 T1 获得了一个 Tvar,比如 X,但尚未提交。现在另一个事务 T2 想要访问 X。在 Haskell STM 中,T2 被阻塞并稍后重试。我希望事务将以非阻塞方式执行,其中 T2 将中止 T1 或 通过咨询争用管理器退出一段时间。 T1 稍后将重试。就像在积极争用管理器的情况下发生的那样,它总是选择在冲突时中止敌对事务。 这只是我想做的一个实验。 提前致谢。

【问题讨论】:

  • 我认为这个问题对于 StackOverflow 来说太宽泛了——你能试着缩小范围吗?
  • @GaneshSittampalam 如何使用 Haskell 实现非阻塞 STM,第二个事务不需要等待。
  • 例如,询问您遇到的具体问题、您尝试过的细节/不起作用的细节等。
  • 据我所知hackage中的stm包已经是无障碍的了。
  • AFAIK,Haskell 的 STM 实现不提供公平保证:允许交易无限期地饿死。您的问题是关于重写实现以使某些事务具有比其他事务更高的优先级,以便它们不仅不会饿死,而且甚至无法重试,以无等待的方式运行。这看起来是一个有趣的大型项目。除非某些库已经提供了类似的东西,否则我认为 SO 答案不能包含所有这些 STM 重新设计。

标签: haskell stm


【解决方案1】:

首先:默认的 STM 实现不会“阻止”冲突事务。相反,每个事务都全速运行,并且仅在提交阶段检测到冲突。当事务尝试提交时,它要么成功,要么被中止并立即重新启动事务。它在任何时候都不会“阻塞”。 (您可能会想到 retry 原语,它确实阻止交易。)

第二:Monad Reader 有一个问题(不,我不记得是哪个数字),它描述了 STM 的实现,其中事务冲突立即回滚一个冲突事务(哪个取决于时间)。你可能会觉得很有趣。 (另一方面,代码不可访问,所以...)

编辑:它是issue 15(最后一节)。

【讨论】:

  • 作为评论可能比作为答案更好 - 唯一可能回答问题的内容在链接中。
  • @MathematicalOrchid,感谢您的回答。我试图在 Haskell 中实现动态软件事务内存中使用的争用管理策略 [链接] (cs.rochester.edu/u/scott/papers/2005_PODC_CM.pdf)。让我阅读您链接的 PDF;希望对我有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-27
  • 1970-01-01
  • 2019-06-06
  • 2014-08-28
  • 2015-08-01
  • 1970-01-01
相关资源
最近更新 更多