Haskell中的事务处理与并发编程
1. Haskell中的转账函数
转账函数 transfer 用于将资金从一个账户转移到另一个账户,代码如下:
transfer :: Account -> Account -> Int -> IO ()
-- Transfer 'amount' from account 'from' to account 'to'
transfer from to amount
= atomically (do { deposit to amount
; withdraw from amount })
这里的 atomically 函数确保内部的操作是原子性的,它有两个重要保证:
- 原子性 : atomically 操作的效果会一次性对其他线程可见,保证不会出现钱已存入目标账户但还未从源账户取出的中间状态。
- 隔离性 :在 atomically 操作期间,操作不受其他线程影响,就像操作开始时对世界状态进行了快照,然后基于该快照执行。
简单的 atomically 执行模型是使用全局锁,操作前获取锁,操作后释放锁,但该模型有两个问题:
- 无法保证隔离性,其他线程可直接修改 IORef 。
- 性能
超级会员免费看
订阅专栏 解锁全文
23

被折叠的 条评论
为什么被折叠?



