1.关键段共初始化化、销毁、进入和离开关键区域四个函数。
初始化:void InitializeCriticalSection(LPCRITICAL_SECTIONlpCriticalSection);
销毁:void DeleteCriticalSection(LPCRITICAL_SECTIONlpCriticalSection);
进入关键区域:void EnterCriticalSection(LPCRITICAL_SECTIONlpCriticalSection);
离开关关键区域:void LeaveCriticalSection(LPCRITICAL_SECTIONlpCriticalSection);
2.关键段可以解决线程的互斥问题,但因为具有“线程所有权”,所以无法解决线程同步问题。
3.推荐关键段与旋转锁配合使用。以下为旋转锁的一些函数介绍:
函数功能:初始化关键段并设置旋转次数
BOOLInitializeCriticalSectionAndSpinCount( LPCRITICAL_SECTIONlpCriticalSection, DWORDdwSpinCount);
函数说明:旋转次数一般设置为4000。
函数功能:修改关键段的旋转次数
DWORDSetCriticalSectionSpinCount( LPCRITICAL_SECTIONlpCriticalSection, DWORDdwSpinCount);
《Windows核心编程》第五版的第八章推荐在使用关键段的时候同时使用旋转锁,这样有助于提高性能。值得注意的是如果主机只有一个处理器,那么设置旋转锁是无效的。无法进入关键区域的线程总会被系统将其切换到等待状态。