我有两个线程,将执行:
_Atomic volatile uint64_t foo;
// returns 1 if it updated foo, 0 if fool already had the new value
int try_to_update_foo(uint64_t new) {
if (foo < new) {
foo = new;
return 1;
}
return 0;
}
我希望foo < new
比较和foo = new
赋值操作是一个原子操作。
也就是说,如果两个线程都试图将foo更新为相同的新值,则其中一个必须返回1,另一个必须返回0。(不管是哪种方式)。
我可以在C11中实现这一点,而不涉及信号量/互斥量吗?
1条答案
按热度按时间dddzy1tm1#
您可以使用
atomic_compare_exchange_weak()
或atomic_compare_exchange_strong()
:详情请参见文档:https://en.cppreference.com/w/c/atomic/atomic_compare_exchange