40、Haskell中的事务处理与并发编程

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
- 性能

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值