C++ 对关键部分进行分层是否有效?
例如,这是否有效C++ 对关键部分进行分层是否有效?,c++,winapi,critical-section,C++,Winapi,Critical Section,例如,这是否有效 CRITICAL_SECTION cs_A; CRITICAL_SECTION cs_b; ::InitializeCriticalSection( &cs_A ); ::InitializeCriticalSection( &cs_B ); ::EnterCriticalSection( &cs_A ); // First level /* do some stuff with A */ ::EnterCriticalSection(
CRITICAL_SECTION cs_A;
CRITICAL_SECTION cs_b;
::InitializeCriticalSection( &cs_A );
::InitializeCriticalSection( &cs_B );
::EnterCriticalSection( &cs_A ); // First level
/* do some stuff with A */
::EnterCriticalSection( &cs_B ); // Second level
/* do some stuff with A and B */
::LeaveCriticalSection( &cs_B ); // Second level
/* do some stuff with A */
::LeaveCriticalSection( &cs_A ); // First level
::DeleteCriticalSection( &cs_A );
::DeleteCriticalSection( &cs_B );
我想用两个关键部分来保护代码的两个部分。
我能做这个吗
可能的重复项:
我认为你的问题与你提到的问题不同,因为你有两个不同的关键部分
无论如何,您可以嵌套它们,但必须始终以相同的顺序输入/获取它们,否则您将面临死锁的风险。每当您有多个锁并且可能在一个时间点持有多个锁时,您必须确保始终以相同的顺序获取锁。不遵守这一点可能会导致死锁
这是一条广为人知、广受讨论的规则。例如,.出于好奇:为什么不使用C++11并发库?