0

我正在尝试为自组织列表开发无锁解决方案。我最近发现了标记指针,并认为它对我有用。

我的节点结构如下:

typedef struct node {
  unsigned long val;
  struct node * next;
} node_t;

我想使用原子库中的 compare_exchange_strong 函数

std::atomic<node_t*> nodeAtomic;
nodeAtomic.store(node, std::memory_order_seq_cst);

nodeAtomic.compare_exchange_strong(nodeNew, node,    std::memory_order_seq_cst)

例如,如果一个线程正在一个节点上工作,那么 cas 不应该通过,因为这个低位将不匹配。

我的问题是:

  1. 如何在不丢失节点具有的引用(next & val)的情况下设置此位?
  2. 我怎样才能把它放回去?
4

0 回答 0