我想在c ++中以原子方式实现TestandSet。什么操作等同于c ++中的xchg指令
答案 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()
。