Haskell STM:如何使用Haskell实现无阻塞STM?

时间:2015-01-16 09:53:03

标签: haskell stm

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

1 个答案:

答案 0 :(得分:2)

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

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

编辑:这是issue 15(最后一部分)。