GCC在现代处理器上的比较和交换保证是什么?

时间:2017-06-06 00:00:45

标签: c multithreading pthreads

我想知道__sync_bool_compare_and_swap()在不同情况下的保证

当只有一个线程访问数据时 - 我认为它会检查指针,如果它与值匹配则交换它

但是如果,两个处理器同时进行比较和交换呢?会发生什么?

如果线程在另一个线程设置值时进行比较和交换怎么办?

当值受互斥锁

保护时,如果线程进行比较和交换,该怎么办?

当然假设只有2个线程同时访问任何数据......

1 个答案:

答案 0 :(得分:0)

要理解的关键点是,这是使用能够原子写入的特定CPU指令完成的。

如果两个线程进行比较和交换,其中一个线程将首先执行,另一个线程将失败,并且必须使用新值重试。

如果该值在两个线程中都受到互斥锁的保护(假设有2个线程),那么无论如何__sync_bool_compare_and_swap()将被一次调用一个。如果它仅在一个线程中受到保护,则将其视为未受保护,即互斥锁无效。