【发布时间】:2018-04-20 01:56:24
【问题描述】:
我在https://gcc.gnu.org/onlinedocs/gcc-4.1.0/gcc/Atomic-Builtins.html 看到了内置列表。但是对于原子集,您是否需要使用 __sync_lock_test_and_set 和 __sync_lock_release 对?
我在https://attractivechaos.wordpress.com/2011/10/06/multi-threaded-programming-efficiency-of-locking/ 上看到过这个例子。
volatile int lock = 0;
void *worker(void*)
{
while (__sync_lock_test_and_set(&lock, 1));
// critical section
__sync_lock_release(&lock);
}
但是如果我使用这个例子,并且在临界区中做我的原子集,那么不同变量的原子集将被不必要地序列化。
感谢任何关于如何在我有多个原子变量的情况下进行原子集的输入。
【问题讨论】:
-
你真的必须使用那些遗留的内置函数吗? gcc.gnu.org/onlinedocs/gcc-7.3.0/gcc/… 建议在新代码中避免使用它们。
-
好主意。我在“c 中的原子操作”中找到的大多数链接都是关于这些遗留内置函数的。 __atomic_store 内置函数可以实现我的 atomic64_set 函数。