比如说,这样做是否有效?
CRITICAL_SECTION cs;
::InitializeCriticalSection( &cs );
::EnterCriticalSection( &cs ); // First level
::EnterCriticalSection( &cs ); // Second level
/* do some stuff */
::LeaveCriticalSection( &cs ); // Second level
::LeaveCriticalSection( &cs ); // First level
::DeleteCriticalSection( &cs );
显然,我从不会有意这样做,但如果由于函数调用导致这种情况发生呢?例如,"第一层"被调用以为复杂(例如搜索)算法锁定对象,"第二层"则在该对象的访问器函数中被调用。