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