Interlocked*函数对共享内存有用吗?

Adr*_*thy 9 winapi ipc interlocked shared-memory

两个Windows进程的内存映射了相同的共享文件.如果文件由计数器组成,是否适合使用Interlocked*函数(如InterlockedIncrement)来更新这些计数器?那些会跨进程同步访问吗?或者我需要使用更重的东西,比如互斥体?或者共享内存机制本身也可以确保一致的视图.

Mic*_*urr 7

互锁功能仅适用于该类型的使用.

来自http://msdn.microsoft.com/en-us/library/ms684122.aspx:

如果变量位于共享内存中,则不同进程的线程可以使用这些函数.

当然,如果您需要以原子方式更新多个项目,则需要使用跨进程的互斥锁或其他同步对象.共享内存机制没有内置任何内容来提供访问共享内存的同步 - 您需要使用互锁函数或同步对象.

  • 但InterlockedIncrement是否可以工作*跨进程*?我认为这是相关的问题 - 据我所知,事实并非如此. (2认同)

Fra*_*ack 3

来自MSDN

...

互锁 API

互锁函数提供了一种简单的机制,用于同步对多个线程共享的变量的访问。它们还以原子方式对变量执行操作。如果变量位于共享内存中,则不同进程的线程可以使用这些函数。

所以,是的,共享内存方法是安全的。