1个主应用程序A,和若干个从应用程序B1,B2,...Bn,。
A和B1,...Bn共享内存mem,A向mem写数据,而B1,....Bn去读数据,请问,如何保证这么多的进程的互斥呢。在多个进程之间如何保证互斥。
难道共享内存的互斥性由系统自己来调度吗?
A和B1,...Bn共享内存mem,A向mem写数据,而B1,....Bn去读数据,请问,如何保证这么多的进程的互斥呢。在多个进程之间如何保证互斥。
难道共享内存的互斥性由系统自己来调度吗?
解决方案 »
- C++ 设置IE默认加载项
- regsvr32 注册com组件失败,求解
- 我的console控制台程序,退出时提示无法正常关闭
- 紧急求助:Buffer overrun问题
- 我想把一个已经编译好的vc程序反编译成源代码,有办法吗,谢谢
- 我不会!
- 自定义gina.dll基本完成,还有最后两个问题,请有经验的兄弟进来看看,会有高分送出
- 复制的时候能否实现自动过滤功能?
- 关于ifstream::getline读行的简单问题,,在线等!!急~~~!!
- CSplitterWnd分出的不同窗格如何互相定义对方的全局指针?
- 菜鸟提问关于unlink() 和system()
- 谁给一段用stmp发邮件的代码,马上结贴
To xjtt2000 (沧海一笑):有很多方法可以用来做互斥的。系统不提供对共享内存的互斥保证。
比较简单的方法是通过CreateEvent创建一个有名字的Event(自动重置,初始为TRUE),然后写两个函数Lock和Unlock。在访问共享内存之前调用Lock,访问之后调用Unlock。
BOOL Lock(HANDLE hEvent, DWORD dwTimeOut)
{
if (WAIT_OBJECT_0 == WaitForSingleObject(hEvent, dwTimeOut))
{
return TRUE;
}
return FALSE;
}
BOOL Unlock(HANDLE hEvent)
{
return SetEvent(hEvent);
}
CRITICAL_SECTION
或者利用事件之类的
还有就是可以用楼上讲的,用文件映射
如果共享的东西不多,用共享内存就可以了,FileMapping比较正式,一般用与大块数据共享