EnterCriticalSection不会锁定

kak*_*ush 3 c++ windows

这只是我代码的一小部分:

CRITICAL_SECTION _cs;
InitializeCriticalSection(&_cs);

 void lock() {
    if (_initizalized){
      EnterCriticalSection(&_cs);
      EnterCriticalSection(&_cs);
      _locked = true;
    }
  }
Run Code Online (Sandbox Code Playgroud)

(我写了两次"EnterCriticalSection",因为我注意到这行不起作用)据我所知,这必然会导致死锁.但事实并非如此.为什么?

Wol*_*ler 9

没有相同的线程可以随意输入它.CRITICAL_SECTION用于限制多个不同线程之间的访问.


Cha*_*had 7

EnterCriticalSection允许来自同一线程的递归调用.从文档:

在线程拥有关键部分的所有权后,它可以对EnterCriticalSection或TryEnterCriticalSection进行额外调用,而不会阻止其执行.这可以防止线程在等待它已经拥有的关键部分时自行死锁.每次EnterCriticalSection和TryEnterCriticalSection成功时,线程都会进入临界区.每次进入临界区时,线程必须调用一次LeaveCriticalSection.