临界区(Critical Section)保证在某一时刻只有一个线程能访问数据的简便办法。在任意时刻只允许一个线程对共享资源进行访问。如果有多个线程试图同时访问临界区,那么在有一个线程进入后其他所有试图访问此临界区的线程将被挂起,并将一直持续到进入临界区的线程离开。临界区在被释放后,其它线程可以继续抢占,并以此达到用原子方式操作共享资源的目的。
临界区包含两个操作原语:进入临界区---EnterCriticalSection(),离开临界区---LeaveCriticalSection(),
EnterCriticalSection()语句执行后,代码将进入临界区,以后不论发生什么,必须确保与匹配的LeaveCriticalSection()都能被执行到。否则临界区保护的共享资源将永远不会被释放。虽然临界区同步速度很快,(缺点)但却只能用来同步本进程内的线程,二不可用来同步多个进程中的线程。
使用临界区的步骤:
1.申请一个临界区变量 CRETICAL_SECTION gSection;
2.初始化临界区 InitializeCriticalSection(&gSection);
3.使用临界区 EnterCriticalSection(&gSection); .........省略代码......... LeaveCriticalSection(&gSection);
4.释放临界区 DeleteCriticalSection(&gSection);