软件事务内存(STM):多进程编程的新方法
1. 软件事务内存简介
在多进程程序设计中,同步问题一直是一个挑战。传统的并发对象实现方式,如基于锁或无互斥的方法,设计起来并不容易。软件事务内存(STM)方法应运而生,旨在让程序员摆脱与同步相关的“实现细节”。
STM的核心思想是为多进程程序的设计者提供一种语言构造,即事务(transaction)的概念。事务是一种原子过程,程序员只需关注程序中哪些部分需要原子执行,而原子性的实现由底层的STM系统自动处理。
1.1 事务:高级同步机制
为了更好地理解STM,我们先来看传统方法的局限性。传统上,提供高效的基本原子对象(如栈、队列、计数器、快照等)的实现,并将其放在库中,对程序员隐藏实现细节。同时,需要一种可扩展且易于使用的语言构造,让程序员定义哪些涉及访问基本对象的代码部分需要原子执行。
然而,锁在处理这类问题时存在明显不足。锁不可扩展且无法组合,不能满足多进程程序中对多个对象同时进行原子操作的需求。例如,在一个多进程程序中,若要将队列Q1的第一个元素原子地移动到队列Q2,简单定义的 move_item 过程无法保证原子性。因为在 Q1.dequeue() 和 Q2.enqueue(x) 之间,可能会有其他事务对Q1和Q2进行任意数量的访问。
一种临时的解决方案是将 move_item 定义为队列的多对象原子操作,但这种方法存在以下问题:
- 会使队列的实现更困难,因为多对象原子操作比单对象操作更难实现。
- 不具有可扩展性。当操作涉
超级会员免费看
订阅专栏 解锁全文
2万+

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



