NoS*_*tAl 10 visibility lock-free
我已经看到了堆栈的一些无锁实现...我的问题是关于可见性,而不是原子性.例如,无锁堆栈的元素(不是指针)必须至多为64位?我是这么认为的,因为你无法保证知名度.真实示例:可以安全地插入此结构并从无锁容器中删除
struct person
{
string name;
uint32_t age;
}
Run Code Online (Sandbox Code Playgroud)
编辑:有些人对这个问题感到困惑.为了解释一下:如果作家把人推到堆栈上,读者就会得到它,是否保证读者看到(记忆可见性)正确的人的内容.
小智 3
我可能是错的,但我认为这个问题是不正确的。
原子指令通常处理单指针长度数据;最多有两个指针长度的数据。
典型的结构无法以原子方式操作,因为它太大。
因此,无锁堆栈将且只会操作指向元素的指针(据我所知,需要在指针长度边界上对齐 - 我知道没有平台不是这种情况)。