一、STM是什么
STM 提供了一个并发控制机制来管理对共享内存的访问,利用了这两个概念:乐观和事务,以管理共享并发控制。
乐观乐观指的是在假定不会发生错误的情况下,我们并行地执行多个原子操作块。
完成这些之后,我们检测这其中是否发生了一些问题。
- 如果没有找到任何问题,那么我们更新原子操作块中的状态变量。
- 如果发现了问题,那么我们回滚并且重试操作。
较之其它替代方法来说,乐观并发机制通常提供可伸缩度更高的选择。
事务
STM的模型构建与数据库事务处理较为相似。
在利用STM实现的程序中,Java的堆即是支持启动/提交以及回滚的事务型数据集。
在对象掌握内存中的状态的同时,事务机制仅仅实现下面的几个特性:原子性,一致性以及隔离。
二、实现过程
STM有点像数据库的事务,不过STM是对于程序执行来说的,大概是这样的一个过程:
在程序开始执行"bytecode"时,先开启一个事务,用一个ThreadLocal的东东来记录事务中的log
记录
- 读取的所有的对象
- 修改对象
的记录
在上面的过程中“探测”有没有修改,比如检查一个对象的最后修改时间是否和事务开始时一致。
如果执行到"bytecode"的最后,
- 没有发现修改,则把修改的内存"commit",
- 如果有修改,则"rollback"。
三、常用函数
https://www.oschina.net/translate/software-transactional-memory-stm
https://blog.csdn.net/hengyunabc/article/details/7802855
https://zhuanlan.zhihu.com/p/151425608