我见过一个项目,其中进程之间的通信是使用共享内存进行的(例如,::CreateFileMapping
在 Windows 下使用),每次其中一个进程想要通知共享内存中有一些数据可用时,使用命名事件的同步机制会通知感兴趣的一方共享内存的内容发生了变化。
我担心这样一个事实,即读取新信息的进程不存在适当的内存围栏,以知道它必须使其数据副本无效并在生产者进程“发布”后从主内存中读取它.
您知道如何在 Windows 上使用共享内存来实现这一点吗?
编辑 只是想补充一点,在创建文件映射后,进程只使用一次 MapViewOfFile() API,每次对共享数据的新修改都使用通过初始调用 MapViewOfFile() 获得的指针来读取通过共享内存发送的新数据. 正确的同步是否要求每次共享内存中的数据更改时,读取数据的进程必须每次都创建 MapViewOfFile() ?