gpt4 book ai didi

c - 如何在C/Linux中实现双重比较和交换?

转载 作者:太空宇宙 更新时间:2023-11-04 00:07:19 25 4
gpt4 key购买 nike

我正在阅读论文 "Simple, fast, and practical non-blocking and blocking concurrent queue algorithms"我意识到他们假设计算机自动执行以下伪代码:

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

其中 Q->Tail 和 tail 是指针和包含指针和计数器的结构的实例。

我知道 gcc 为 c 中的单个单词比较和交换提供了几个内置函数。但是,是否可以在 c 中(使用 Linux)从单个比较和交换实现非阻塞原子双重比较和交换?这是实现引用论文伪代码的正确方法吗?

最佳答案

我不知道有任何 CAS 操作可以在两个不同的内存位置上工作。但是,这篇论文有可能使用指针和计数器的结构作为一种变通方法,将这两个字段视为更大的类型,因此,以原子方式更改两者。

假设您有一个包含两个字段的结构,一个指针和一个计数器:指针大小为 4 个字节,计数器大小为 4 个字节;正确对齐,无需填充到 8 字节的结构大小。假设您还有一个处理 8 字节值的 CAS 操作(例如指向 64 位整数的指针)。您可以分别准备结构值,并在结构上使用 CAS 操作作为一个整体来一次更改两个值。

关于c - 如何在C/Linux中实现双重比较和交换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18406352/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com