1

所以 fetch-and-add 操作的共识数是 2

我很难理解这意味着什么以及它如何影响多线程编程?例如,与 compareandswap 相比,我会喜欢一些实际的例子来说明这将如何影响......非常感谢。

4

1 回答 1

1

Fetch-and-add 使您能够以原子方式读取、修改和定位内存。共识意味着协议(在这种情况下为获取和添加)可以为 n 个不同的线程提供共识。

这意味着什么?

我们的目标是使用一种协议,例如,一个线程确定一个值,然后该值被所有其他线程采用。您可以搜索其中一些协议。在多线程中,重要的是我们可以原子地修改内存并且线程有时决定一个值。

重要的是要注意共识协议是无等待的,这意味着即使一个线程死亡(由于某种原因),所有线程也会取得进展。因此,在使用多线程时,了解对象共识数非常重要。例如,原子寄存器 (1) 的共识数告诉我们,我们将永远无法仅使用可以为 2 个线程提供共识的原子寄存器来实现对象。这就是我们在多线程中使用诸如 fetch-and-add 之类的结构的原因。

示例 OS 中的调度通常使用 FIFO 队列完成。FIFO 队列有两个共识,因此将它们用于多线程是安全的。

于 2017-08-22T08:27:26.610 回答