1个主应用程序A,和若干个从应用程序B1,B2,...Bn,。
A和B1,...Bn共享内存mem,A向mem写数据,而B1,....Bn去读数据,请问,如何保证这么多的进程的互斥呢。在多个进程之间如何保证互斥。
难道共享内存的互斥性由系统自己来调度吗?

解决方案 »

  1.   

    To weakwater(我是河南人):问的是“进程间”!
    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);
    }
      

  2.   

    利用互斥变量就行了
    CRITICAL_SECTION
    或者利用事件之类的
    还有就是可以用楼上讲的,用文件映射
      

  3.   

    To ww51xh(VC菜鸟): CRITICAL_SECTION 好像只能在进程内使用吧?
    如果共享的东西不多,用共享内存就可以了,FileMapping比较正式,一般用与大块数据共享