打印

共享内存互斥问题

[复制链接]
1267|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sinadz|  楼主 | 2012-5-24 22:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我自己写了一个类,就是创建一个共享内存,然后实现进程之间共享数据,比如A进程就是往内存里写入数据,B进程就是从内存里读取数据,当然这是需要加锁互斥的,我自己也写了一个锁,但是锁偶尔会出问题:
例如:A进程依次往内存里写入ABCDEFG,正常情况B读出也是ABCDEFG, 但是却会出现ABCCEFG这样的情况,请各位大侠指教一下
上代码
C/C++ code m_lpFileMapBuffer = MapViewOfFile(m_hFileMap, dwAccess, 0, 0, dwSize);LPVOID ShareMemory::GetBuffer(){    return (m_lpFileMapBuffer)?(m_lpFileMapBuffer):(NULL);}void ShareMemory::Lock(){    while ( InterlockedExchange(&m_lock, RESOURCE_IN_USE) == RESOURCE_IN_USE )         Sleep(1);}void ShareMemory::Unlock(){    InterlockedExchange(&m_lock, RESOURCE_IN_FREE);}BOOL ShareMemory::WriteData(char
*pData, DWORD dwSize){    Lock();    BOOL ret = FALSE;    char
*p = (char
*)GetBuffer();    if (p)    {        memcpy(p, (char*)&pData, dwSize);        ret = TRUE;    }    Unlock();    return ret;}BOOL ShareMemory::ReadData(char*
&pData, DWORD dwSize){    Lock();    BOOL ret = FALSE;    char
*p = (char
*)GetBuffer();    if (p)    {        p = pData;        ret = TRUE;    }    Unlock();    return ret;}

相关帖子

沙发
秋天落叶| | 2012-5-24 22:50 | 只看该作者
这程序看着很乱

使用特权

评论回复
板凳
火箭球迷| | 2012-5-24 23:10 | 只看该作者
不同进程的内存空间完全独立。指针只能在本进程内使用,跨进程将无效。

所以内存共享一定要是共享具体的内容(指针指向的内容),而不能是指针本身,因为到了另一个进程中,指针就失效了。

另外,由于内存空间是完全独立的,所以共享时也只能拷贝内存数据,让该数据在2个进程中都有一个拷贝。而不是说,共享内存就是直接用这个进程读取另一个进程的数据。

注意一下就是了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

304

主题

2313

帖子

0

粉丝