Win32 InterlockedIncrement 和 InterlockedExchange 跨进程是原子的吗?

Abh*_*ain 2 linux windows gcc atomic atomic-swap

MSDN 说,互锁函数提供了一种简单的机制来同步访问由多个线程共享的变量。

如果变量位于进程的共享内存中,我不确定它们是否可以跨多个进程的线程工作。

同样,GNU GCC 编译器的内在函数:__sync_add_and_fetch 和 __sync_lock_test_and_set 怎么样?

Kon*_*rov 5

这个问题本质上是两个不同答案的两个问题。

  1. 对于__sync_XXXGCC 中的内置函数,答案是肯定的。

参考任何像这样的在线文档,在那里描述,这些内置函数通常会发出完整的屏障,甚至防止处理器管道内的内部推测负载。每一个多线程、多进程等共享内存对它们都是安全的。

  1. 我对 Windows InterLockedXXX 函数一无所知。但MSDN知道,并说:

如果变量在共享内存中,不同进程的线程可以使用这种机制

所以两个答案都是“是”。