加载中...

软件事务内存(Software Transactional Memory,STM)是一种并发控制机制:把对共享内存的一组读写包裹为事务,由运行时保证其原子性与隔离性;事务间发生冲突时自动回滚重试,程序员无需手工管理锁。
事务执行时记录读写集,提交时校验期间是否有其他事务修改了所读数据,无冲突则原子提交,否则丢弃重来。这类乐观并发要求事务体可安全重放,因此纯函数式语言尤为契合——Haskell 用类型系统禁止事务内执行不可回滚的 I/O。
Haskell 的 STM 库(基于 Tim Harris 与 Simon Peyton Jones 等人的工作)提供 atomically、retry、orElse 等原语,事务可组合是其相对锁的根本优势;Clojure 内置 ref 与 dosync 将 STM 作为语言级并发模型的一部分。
优点是免死锁、可组合、代码接近顺序逻辑;缺点是高争用下重试开销大,与不可回滚副作用的边界需要小心处理,在命令式语言中推广效果有限。

登录 后参与讨论
暂无讨论,来发表第一条评论吧