我在读这篇论文时意识到,他们假设计算机原子地实现了以下伪代码:

CAS(Q->Tail,tail,<next.ptr,next.count+1>)

其中Q->Tail和Tail是一个指针和一个包含指针和计数器的结构实例。
我知道gcc在c中提供了几个用于单字比较和交换的内置组件。但是,是否可以在c中实现一个非阻塞的原子双比较和交换(使用Linux)这是实现参考文献伪代码的正确方法吗?

最佳答案

我不知道有任何CAS操作在两个不同的内存位置上工作但是,有可能本文使用指针和计数器的结构作为解决方法,将这两个字段都视为更大的类型,因此,原子地更改这两个字段。
假设您有一个由两个字段组成的结构,一个指针和一个计数器:指针大小为4字节,计数器大小为4字节;正确对齐而不填充到8字节的结构大小假设您还有一个CAS操作,它处理8字节的值(例如指向64位整数的指针)可以分别准备结构值,并对整个结构使用CAS操作一次更改两个值。

10-06 05:20
查看更多