Concurrency 与参与者模型和锁相比,事务性内存是什么

Concurrency 与参与者模型和锁相比,事务性内存是什么,concurrency,transactional-memory,Concurrency,Transactional Memory,与基于角色和基于锁的同步相比,事务性内存是什么 据我所知,这是另一种并发控制机制。或者它与参与者、事件、锁等完全不同?事务内存(TM)是一种无锁同步方法。在基于锁的同步机制中,一个线程获取锁并进入同步块,而其他线程则等待锁可用。在TM中,线程不等待锁,每个线程都会继续,就好像锁可用一样。然而,为了确保执行的正确性,在同步块内进行的所有内存访问都是推测性的。一旦执行到达同步区域的末尾,线程就会相互通信并共享读写的内存位置(在TM术语中称为读集和写集)。如果一个线程读取了另一个线程推测性写入的内存位

与基于角色和基于锁的同步相比,事务性内存是什么

据我所知,这是另一种并发控制机制。或者它与参与者、事件、锁等完全不同?

事务内存(TM)是一种无锁同步方法。在基于锁的同步机制中,一个线程获取锁并进入同步块,而其他线程则等待锁可用。在TM中,线程不等待锁,每个线程都会继续,就好像锁可用一样。然而,为了确保执行的正确性,在同步块内进行的所有内存访问都是推测性的。一旦执行到达同步区域的末尾,线程就会相互通信并共享读写的内存位置(在TM术语中称为读集和写集)。如果一个线程读取了另一个线程推测性写入的内存位置,则发生了冲突,冲突解决将发生。最后,如果两个或多个线程没有冲突,它们都可以继续,并将使用推测性写入更新内存。尽管实现复杂,但通过编写类似于粗粒度锁的程序(只需指定事务的开始和结束),可以获得细粒度锁(基于内存位置)的优势

根据您如何进行数据版本控制(原始数据与推测数据)和冲突解决(急切-随用随做,懒惰-最终完成),有几十种TM系统。以及它们所实现的平台(硬件、软件、混合)

我不太擅长基于角色的并发性。在我有限的知识范围内,它似乎是通过向其他参与者发送消息来工作的,每个参与者都完成了被要求完成的工作,并在需要时创建更多的参与者。因此,我想从概念上讲,它类似于分而治之式的编程,即工作是动态创建的,并被传递给可用的参与者。这种类型的范例类似于函数式编程,与需要同步的传统共享内存样式正交。因此,我猜想,基于参与者的模型不需要锁或无锁同步,因为它们本质上是并行的。

事务内存(TM)是一种无锁同步方法。在基于锁的同步机制中,一个线程获取锁并进入同步块,而其他线程则等待锁可用。在TM中,线程不等待锁,每个线程都会继续,就好像锁可用一样。然而,为了确保执行的正确性,在同步块内进行的所有内存访问都是推测性的。一旦执行到达同步区域的末尾,线程就会相互通信并共享读写的内存位置(在TM术语中称为读集和写集)。如果一个线程读取了另一个线程推测性写入的内存位置,则发生了冲突,冲突解决将发生。最后,如果两个或多个线程没有冲突,它们都可以继续,并将使用推测性写入更新内存。尽管实现复杂,但通过编写类似于粗粒度锁的程序(只需指定事务的开始和结束),可以获得细粒度锁(基于内存位置)的优势

根据您如何进行数据版本控制(原始数据与推测数据)和冲突解决(急切-随用随做,懒惰-最终完成),有几十种TM系统。以及它们所实现的平台(硬件、软件、混合)


我不太擅长基于角色的并发性。在我有限的知识范围内,它似乎是通过向其他参与者发送消息来工作的,每个参与者都完成了被要求完成的工作,并在需要时创建更多的参与者。因此,我想从概念上讲,它类似于分而治之式的编程,即工作是动态创建的,并被传递给可用的参与者。这种类型的范例类似于函数式编程,与需要同步的传统共享内存样式正交。因此,我猜基于参与者的模型不需要锁或无锁同步,因为它们本质上是并行的。

所以基本上一切都是同步机制?TM最初是作为无锁同步机制提出的,从那时起,很少有人尝试将其用作以事务为计算单元的编程模型。由于事务具有ACI属性,因此它是利用并发性的一个很好的候选。因此,基本上一切都是同步机制?TM最初是作为一种无锁同步机制提出的,从那时起,很少有人尝试将其用作计算单元为事务的编程模型。由于事务具有ACI属性,因此它是利用并发的一个很好的候选对象。