【发布时间】: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 重新设计。