2017-06-06 43 views
1

我想知道是什么__sync_bool_compare_and_swap()在不同的场景什么是对现代处理器GCC的比较并交换保证

保证当只有一个线程访问数据 - 我相信它会检查指针,如果它匹配值,则交换它

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

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

线程比较和交换,当值由一个互斥

当然,假设只有2个是同时访问任何数据线保护...

+1

该文档非常清晰:https://gcc.gnu.org/onlinedocs/gcc-4.4.3/gcc/Atomic-Builtins.html这些原语的整体思想是,围绕每个这样的多个线程将获得一致的结果。他们例如用于实现自旋锁。 – Gene

+2

可能发生两件事:操作成功或失败。 –

+0

@KerrekSB所以在比较和设置之间不能有任何中间值,并且处理器保证了这一点? – Whiteclaws

回答

0

的关键点理解是这是通过使用特定的CPU指令来完成的,这些指令能够以原子方式写入。

如果两个线程比较并交换,其中一个线程将能够首先执行,另一个线程将失败并且将不得不用新值重试。

如果该值在两个线程中都被互斥锁保护(假设有2个线程),则无论如何__sync_bool_compare_and_swap()会一次被调用一个线程。如果它仅在一个线程中受到保护,请认为它不受保护,即互斥体不起作用。