如何在原子上进行c ++编码中的xchg汇编指令

时间:2014-03-18 14:08:18

标签: c++ c assembly

我想在c ++中以原子方式实现TestandSet。什么操作等同于c ++中的xchg指令

2 个答案:

答案 0 :(得分:2)

您可以使用内在函数,具体取决于您的编译器。在gcc中,例如使用__sync_lock_test_and_set(请参阅 - http://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/Atomic-Builtins.html

或者,您可以使用内联汇编并直接执行锁定的xchg

如果你在c ++ 11中工作,你可以使用std :: atomic函数。然而,这提供了更高级别的抽象,因此对x86 ISA的转换不是一对一的。见 - https://www.cl.cam.ac.uk/~pes20/cpp/cpp0xmappings.html

答案 1 :(得分:1)

在Windows上 - InterlockedCompareExchange()

在GCC中 - __sync_bool_compare_and_swap()