Interlocked *函数对共享内存有用吗?
-
08-07-2019 - |
题
两个Windows进程的内存映射了相同的共享文件。如果文件由计数器组成,是否适合使用 Interlocked *
函数(如 InterlockedIncrement
)来更新这些计数器?那些会跨进程同步访问吗?或者我需要使用更重的东西,比如互斥体?或者共享内存机制本身也可以确保一致的视图。
解决方案
来自 MSDN :
...
Interlocked API
互锁功能提供了一个 简单的同步机制 访问共享的变量 多线程。他们也表演 对原子中变量的操作 方式。不同的线程 进程可以使用这些函数if 变量在共享内存中。
所以,是的,使用共享内存方法是安全的。
其他提示
互锁功能仅适用于该类型的使用。
来自 http://msdn.microsoft.com/en-us/库/ ms684122.aspx :
如果变量位于共享内存中,则不同进程的线程可以使用这些函数。
当然,如果您需要以原子方式更新多个项目,则需要使用跨进程的互斥锁或其他同步对象。共享内存机制没有内置任何内容来提供访问共享内存的同步 - 您需要使用互锁函数或同步对象。
不隶属于 StackOverflow