多层关键部分是否有效?

Is it valid to mutilayered a 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( &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 );

我想用两个临界区来保护两段代码。 我可以这样做吗?

可能重复: Is it valid to nest a critical section?

我认为你的问题与你提到的不同,因为你有 两个不同的 关键部分。

无论如何你都可以嵌套它们,但是你必须注意enter/acquire它们总是以相同的顺序排列,否则你有死锁的风险。

当您有多个锁并且在一个时间点可能持有多个锁时,您必须确保始终以相同的顺序获取锁。不遵守这一点可能会导致死锁。

这是一个广为人知和广泛讨论的规则。例如,Use Lock Hierarchies to Avoid Deadlock.