多个线程访问临界区时,可以使用临界区对象。临界区对象是一个独占性共享资源,任一时刻只有一个线程可以拥有临界区。拥有临界区的线程可以访问被保护起来的资源或代码段,其他希望进入临界区的线程将被挂起等待,直到拥有临界区的线程放弃临界区时为止。
CCriticalSection类的用法:
(1)定义CCriticalSection类的一个全局对象(以使各个线程均能访问):
CCriticalSectioncritical_section;
(2)在访问临界区之前,调用CCriticalSection类的成员函数Lock()获得临界区:
critical_section.Lock();
在线程中调用该函数来使线程获得它所请求的临界区。如果此时没有其他线程占有临界区,则调用Lock()的线程获取临界区;否则,线程即将挂起,并放入到一个系统队列中等待,直到当前拥有临界区的线程释放了临界区时为止。
(3)在本线程中访问临界区中的共享资源。
(4)访问临界区完毕后,使用CCriticalSection类的成员函数UnLock()来释放临界区:
critical.section.UnLock();
其实也就是给CRITICAL_SECTION的封装,详情请看我的另一篇文章.
因篇幅问题不能全部显示,请点此查看更多更全内容