gcc内置原子比较和交换

时间:2014-12-07 01:59:22

标签: c gcc atomic atomicity

我想使用gcc内置函数__atomic_compare_exchange(),但我需要它与指定的略有不同,而且我不确定它是否可以实现。

函数原型:

__atomic_compare_exchange(type *ptr, type *expected, type *desired, bool weak, int success_memmodel, int failure_memmodel)

如果ptr == expected

会自动将desiredptr进行比较并将ptr写入expected

我想要达到的目标非常类似,但我的expected!= NULL,基本上我想检查ptr != NULL是否为真,将desired写入{ptr 1}}。

这可以吗?

这是关于其用法的gcc:

https://gcc.gnu.org/onlinedocs/gcc/_005f_005fatomic-Builtins.html

1 个答案:

答案 0 :(得分:2)

当然,但你只需要循环调用它。在每次循环迭代中,读取旧值。如果它为null,则退出循环并返回失败。如果它不为null,则将该旧值用作原子比较和交换的“预期”。如果成功,退出循环并返回成功。否则重复。

顺便说一句,这种通用的方法是如何在比较和交换之上构造任意原子操作。