锁定免费容器和能见度

NoS*_*tAl 10 visibility lock-free

我已经看到了堆栈的一些无锁实现...我的问题是关于可见性,而不是原子性.例如,无锁堆栈的元素(不是指针)必须至多为64位?我是这么认为的,因为你无法保证知名度.真实示例:可以安全地插入此结构并从无锁容器中删除

struct person
{
   string name;
   uint32_t age;
}
Run Code Online (Sandbox Code Playgroud)

编辑:有些人对这个问题感到困惑.为了解释一下:如果作家把人推到堆栈上,读者就会得到它,是否保证读者看到(记忆可见性)正确的人的内容.

小智 3

我可能是错的,但我认为这个问题是不正确的。

原子指令通常处理单指针长度数据;最多有两个指针长度的数据。

典型的结构无法以原子方式操作,因为它太大。

因此,无锁堆栈将且只会操作指向元素的指针(据我所知,需要在指针长度边界上对齐 - 我知道没有平台不是这种情况)。