【发布时间】:2010-12-10 21:33:25
【问题描述】:
两个 Windows 进程的内存映射了同一个共享文件。如果文件包含计数器,是否适合使用Interlocked* 函数(如InterlockedIncrement)来更新这些计数器?那些会跨进程同步访问吗?还是我需要使用更重的东西,比如互斥体?或者也许共享内存机制本身可以确保一致的视图。
【问题讨论】:
标签: winapi ipc shared-memory interlocked
两个 Windows 进程的内存映射了同一个共享文件。如果文件包含计数器,是否适合使用Interlocked* 函数(如InterlockedIncrement)来更新这些计数器?那些会跨进程同步访问吗?还是我需要使用更重的东西,比如互斥体?或者也许共享内存机制本身可以确保一致的视图。
【问题讨论】:
标签: winapi ipc shared-memory interlocked
联锁功能正是为这种类型的使用而设计的。
来自http://msdn.microsoft.com/en-us/library/ms684122.aspx:
如果变量在共享内存中,不同进程的线程可以使用这些函数。
当然,如果您需要以原子方式更新多个项目,则需要使用互斥锁或其他跨进程工作的同步对象。共享内存机制没有内置任何内容来提供对共享内存的访问同步 - 您需要使用互锁函数或同步对象。
【讨论】:
来自MSDN:
...
联锁 API
联锁功能提供了一个 简单的同步机制 访问共享的变量 多个线程。他们还表演 原子变量的操作 方式。不同的线程 进程可以使用这些函数,如果 变量在共享内存中。
所以,是的,您的共享内存方法是安全的。
【讨论】: