【发布时间】:2015-08-08 00:51:12
【问题描述】:
我有两个线程:reader 和 writer。两者都通过 CreateFileMapping + MapViewOfFile 分配的内存进行通信。两者的工作速度都相对较快。两者都异步工作。
问题:阅读器有时会得到零值。而且我绝对确定这不是作者提供的。 writer 提供的值永远不会为零。
我相信当作者和读者试图同时访问内存时会发生这种情况。我希望“CreateFileMapping + MapViewOfFile”机制能够自动解决这类问题。我弄错了吗?我是否需要添加事件来同步对共享内存的访问?
【问题讨论】:
-
写入内存需要时间。当您写入共享内存时,您处于不确定状态。写入操作完成后,更改将反映到所有映射视图。无论如何,您都必须同步读取和写入,以建立一致的结果。
-
1) 为什么我得到零值?不是以前的值? 2)是否可以检测到“读取”功能无法获取数据?某种 GetLastError?
-
不清楚为什么零是一个问题:你不知道你读什么、写什么、怎么写。可能是零写入是写入操作的一部分,而读者在写入处于其任务中间时接受了这一点。
-
零是一个问题,因为我绝对确定作者正在赋予不同的价值。它永远不会是零。
-
您需要post an MCVE。问题中没有足够的信息让我们猜测您可能做错了什么,尽管通常您将需要某种类型的同步。
标签: winapi