我对下面描述的事务内存的理解是否正确?
Is my understanding of transactional memory as described below correct?
我正在尝试了解 TM。看了Ben的回答here,也试着理解了网上其他的一些文章。我仍然不太确定我是否理解正确。根据我对事务内存的理解,线程可以并行执行事务。如果两个(或更多)线程尝试访问同一个事务变量,则除一个线程外的所有线程都将中止事务并重新开始(在某个时刻,不一定立即)。不中止的更新事务变量。
所以简而言之,在 TM 中所有线程 运行 并行,我们希望不会有任何对事务变量的访问重叠,如果有,我们只让一个线程继续,而其他人回滚并重试。这样的TM理解对吗?
这是一个很好的概要。细节相当复杂,可能有些交易无法在给定的 TM 监视器中表达;这意味着您可能必须包括您的交易的两个实现 - 一个乐观的和悲观的。
缓存是底层实现;当您对内存进行事务引用时,缓存会注意到这一点,并在这些引用中的任何一个被修改时生成警报(重新启动),或者拒绝事务关闭(如果有任何被修改)。
事务变量的数量通常必须低于缓存的关联性;否则他们会从缓存中互相驱逐,导致交易永远无法完成。
中断如何在事务中发挥作用仍然是一个悬而未决的问题。
简而言之,这在 20 年前是一个有点迷人的想法。随着它接近一般可用性,它似乎有快速扩展的硬件要求。与加速计算机系统相比,它可能对温暖寒冷的气候更有用。
我正在尝试了解 TM。看了Ben的回答here,也试着理解了网上其他的一些文章。我仍然不太确定我是否理解正确。根据我对事务内存的理解,线程可以并行执行事务。如果两个(或更多)线程尝试访问同一个事务变量,则除一个线程外的所有线程都将中止事务并重新开始(在某个时刻,不一定立即)。不中止的更新事务变量。
所以简而言之,在 TM 中所有线程 运行 并行,我们希望不会有任何对事务变量的访问重叠,如果有,我们只让一个线程继续,而其他人回滚并重试。这样的TM理解对吗?
这是一个很好的概要。细节相当复杂,可能有些交易无法在给定的 TM 监视器中表达;这意味着您可能必须包括您的交易的两个实现 - 一个乐观的和悲观的。
缓存是底层实现;当您对内存进行事务引用时,缓存会注意到这一点,并在这些引用中的任何一个被修改时生成警报(重新启动),或者拒绝事务关闭(如果有任何被修改)。
事务变量的数量通常必须低于缓存的关联性;否则他们会从缓存中互相驱逐,导致交易永远无法完成。
中断如何在事务中发挥作用仍然是一个悬而未决的问题。
简而言之,这在 20 年前是一个有点迷人的想法。随着它接近一般可用性,它似乎有快速扩展的硬件要求。与加速计算机系统相比,它可能对温暖寒冷的气候更有用。