2014-12-05 85 views
2

我正在将事件分组序列组成一个原子事务。在酸性状态下使事件序列原子化

考虑一个Map存储在酸性状态,并想象你想实现Data.Map.alter。带有可能值并返回的函数不能存储在更改日志中,因此无法定义酸性事件Alter。但是,如果我编写一个函数调用query st Lookup ...来查找旧值,然后update st Insert ...来编写新的函数(或删除旧函数),则存在竞争条件,我可能会从中间发生的更新中摧毁信息。

https://github.com/acid-state/acid-state/pull/48中,我使用了额外的MVar来做手动锁定,但必须有更好的解决方案。

任何想法?

回答

3

这里是酸状态的作者。

解决方法是不使用'更改'等高阶函数。酸状态(ACID保证,远程运行代码等)的好处仅以使用可串行化数据为代价。这个限制不太可能被解除。

通常这不是一个大问题;只是专门化你的代码。如果这不能削减它,也许你想保持你的状态在MVar中。

干杯, David。