多线程相关------临界区CriticalSection
多线程一直是短板,整理相关知识方便查询
临界区(Critical Section)
临界区是一段供线程独占式访问的代码.在任意时刻,若有一个线程正在访问该代码段,如果其他所有试图访问的线程都将被挂起,直到访问的线程离开该代码段才可进入,保证线程安全. 适用于控制数据访问. 因其线程所有权其可以用于线程间互斥,而不能用于同步.
相关函数
InitializeCriticalSection初始化临界区对象
void WINAPI InitializeCriticalSection( _Out_ LPCRITICAL_SECTION lpCriticalSection );
EnterCriticalSection等待临界区对象所有权
void WINAPI EnterCriticalSection( _Inout_ LPCRITICAL_SECTION lpCriticalSection );
LeaveCriticalSection释放临界区对象所有权
void WINAPI LeaveCriticalSection( _Inout_ LPCRITICAL_SECTION lpCriticalSection );
注意:EnterCriticalSection执行后,无论如何,必须保证与之匹配的LeaveCriticalSection能够执行,否则临界区保护的共享资源将永远不会被释放.
DeleteCriticalSection销毁临界区对象
void WINAPI DeleteCriticalSection( _Inout_ LPCRITICAL_SECTION lpCriticalSection );