我想知道__sync_bool_compare_and_swap()在不同情况下的保证
当只有一个线程访问数据时 - 我认为它会检查指针,如果它与值匹配则交换它
但是如果,两个处理器同时进行比较和交换呢?会发生什么?
如果线程在另一个线程设置值时进行比较和交换怎么办?
当值受互斥锁
保护时,如果线程进行比较和交换,该怎么办?当然假设只有2个线程同时访问任何数据......
答案 0 :(得分:0)
要理解的关键点是,这是使用能够原子写入的特定CPU指令完成的。
如果两个线程进行比较和交换,其中一个线程将首先执行,另一个线程将失败,并且必须使用新值重试。
如果该值在两个线程中都受到互斥锁的保护(假设有2个线程),那么无论如何__sync_bool_compare_and_swap()
将被一次调用一个。如果它仅在一个线程中受到保护,则将其视为未受保护,即互斥锁无效。