因此,获取和添加操作的共识数为2
我很难掌握这意味着什么以及它如何影响多线程编程?我会喜欢一些实际例子,说明与比较和交换相比会产生什么影响......非常感谢。
答案 0 :(得分:1)
Fetch-and-add使您能够以原子方式读取和修改内存。共识意味着协议(在这种情况下为fetch-and-add)可以为n个不同的线程达成共识。
这是什么意思?
我们的目标是使用协议,例如一个线程确定一个值,该值被所有其他线程采用。你可以谷歌一些这些协议。在多线程中,重要的是我们可以原子地修改内存,并且线程有时会决定一个值。
重要的是要注意共识协议是等待的,这意味着即使一个人死亡(由于某种原因),所有线程也会取得进展。因此,在使用多线程时,重要的是要了解对象的共识数。共识数量例如一个原子寄存器(1)告诉我们,我们永远不能仅使用可以为2个线程达成共识的原子寄存器来实现一个对象。这就是为什么我们在多线程中使用诸如fetch-and-add之类的构造。
示例强> OS中的调度通常使用FIFO队列完成。 FIFO队列具有共识2,因此将它们用于多线程是安全的。