visibility - 无锁容器和可见性

标签 visibility lock-free

我见过一些堆栈的无锁实现...我的问题是关于可见性,而不是原子性。例如,无锁堆栈的元素(不是指针)最多必须是 64 位吗?我想是的,因为你无法保证可见性。真实的例子:这个结构可以安全地插入无锁容器和从无锁容器中删除

struct person
{
   string name;
   uint32_t age;
}

编辑:有些人对这个问题感到困惑。解释一下:如果 writer 将 person 压入堆栈,reader 得到它,是否可以保证 reader 看到(内存可见性)person 的正确内容。

最佳答案

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

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

典型的结构无法进行原子操作,因为它太大了。

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

关于visibility - 无锁容器和可见性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7582561/

相关文章:

c++ - 无锁竞技场分配器实现 - 正确吗?

java - 如何只允许在同一个包中实现接口(interface)

java - 无法将 TextView 设置为 VISIBLE

multithreading - java : how volatile guarantee visibility of "data" in this piece of code?

java - 并行无锁升序 id 生成

java - 将绑定(bind)添加到无界队列

android - 动态添加 View 不显示 View

java - 从 Java 包中访问顶级类

c++ - 是否可以检查 boost::lockfree::queue 是否已满?

c++ - 使用原子锁定免费的单个生产者多个消费者数据结构