参考链接
- CRITICAL_SECTION是每个线程中访问临界资源的定义,它存在于“minwinbase.h”中,临界资源为每次只允许一个线程使用的共享资源,无论硬件或软件临界资源,多个线程必须互斥对其进行访问。
- 线程进入临界区的调度原则:多线程要求进入空闲的临界区,一次只允许一个线程进入,其他未进入线程等待;进入临界区的线程需在有限时间内退出以便其他未进入的线程可进入自己的临界区;若线程不能进入自己的临界区应让出cpu避免出现“忙等”现象。
- 临界区使用时以CRITICAL_SECTION结构对象保护共享资源,用EnterCriticalSection()标识一个临界区,用LeaveCriticalSection释放一个临界区。
- CRITICAL_SECTION结构对象必须经过IntializeCriticalSection()初始化,且要确保所有线程中任何试图访问共享资源的代码都处于此临界区保护之下。保护共享资源在于当一个线程执行了EnterCriticalSection后,临界区结构对象cs里面的信息已被更改以指明哪个线程已占用,EnterCriticalSection()只给线程加锁而非给资源加锁,所以此时其它线程也可访问当前共享资源,但会访问错误,因为已有线程占用。当前占用资源的线程未执行LeaveCriticalSection()前,其他线程碰到EnterCriticalSection()时都会处于等待状态直到当前占用资源线程离开临界区。
5.比如创建多个共享资源:
CRITICAL_SECTION m_PoolCriticalSection[8];
ZeroMemory(&m_PoolCriticalSection,sizeof(CRITICAL_SECTION )*8);
IniticalizeCriticalSection(&m_PoolCriticalSection[i]);
EnterCriticalSection(&m_PoolCriticalSection[i]);
LeaveCriticalSection(&m_PoolCriticalSection[i]);