我想使用gcc内置函数__atomic_compare_exchange()
,但我需要它与指定的略有不同,而且我不确定它是否可以实现。
函数原型:
__atomic_compare_exchange(type *ptr, type *expected, type *desired, bool weak, int success_memmodel, int failure_memmodel)
ptr
== expected
,会自动将desired
与ptr
进行比较并将ptr
写入expected
我想要达到的目标非常类似,但我的expected
是!= NULL
,基本上我想检查ptr != NULL
是否为真,将desired
写入{ptr
1}}。
这可以吗?
这是关于其用法的gcc:
https://gcc.gnu.org/onlinedocs/gcc/_005f_005fatomic-Builtins.html
答案 0 :(得分:2)
当然,但你只需要循环调用它。在每次循环迭代中,读取旧值。如果它为null,则退出循环并返回失败。如果它不为null,则将该旧值用作原子比较和交换的“预期”。如果成功,退出循环并返回成功。否则重复。
顺便说一句,这种通用的方法是如何在比较和交换之上构造任意原子操作。