2014-12-05 84 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。