对于共享内存,在业务上可以进行适当的安排,来进行解决,在代码级别一般都用临界区和互斥量
对于临界区,它是解决线程间的共享内存的,不能垮进程
对于互斥量,可以是线程间的,也可以是进程间的,进程间是利用系统内核对象的,该内核对象是可以有名字,利用该名字可以达到安全的共享内存
在线程之间,临界区消耗的时间大概是互斥量的十分之一,所以,在线程中尽量使用临界区
临界区的使用
先定义临界区变量 CRITICAL_SECTION m_criticl;
用之前初始化临界区InitializeCriticalSection(&m_criticl);
对要保护的代码的开始加 EnterCriticalSection(&m_criticl);
结尾的时候要释放LeaveCriticalSection(&m_criticl);
当不再用,就是析构的时候,删除DeleteCriticalSection(&m_criticl);
互斥量的使用
创建互斥量, 第三个参数不为空,则可以用于进程间的互斥
HANDLE WINAPI CreateMutex(
__in LPSECURITY_ATTRIBUTES lpMutexAttributes,
__in BOOL bInitialOwner,
__in LPCTSTR lpName );
在保护的代码上加 WaitForSingleObject
用完后,释放 ReleaseMutex
最后不用的话,要关掉互斥量的句柄CloseHandle, 因为系统的句柄是有限的