C++ EnterCriticalSection不';t锁
这是我代码的一小部分:C++ EnterCriticalSection不';t锁,c++,windows,C++,Windows,这是我代码的一小部分: CRITICAL_SECTION _cs; InitializeCriticalSection(&_cs); void lock() { if (_initizalized){ EnterCriticalSection(&_cs); EnterCriticalSection(&_cs); _locked = true; } } (我写了两次“EnterCriticalSection”,因
CRITICAL_SECTION _cs;
InitializeCriticalSection(&_cs);
void lock() {
if (_initizalized){
EnterCriticalSection(&_cs);
EnterCriticalSection(&_cs);
_locked = true;
}
}
(我写了两次“EnterCriticalSection”,因为我注意到这行行不通)
据我所知,这一定会造成僵局。但事实并非如此。为什么?没有相同的线程可以随时进入它。 CRITICAL_部分用于限制多个不同线程之间的访问。允许来自同一线程的递归调用。从文件中: 在线程拥有关键部分的所有权之后,它可以 对EnterCriticalSection或TryEnterCriticalSection的其他调用 不妨碍它的执行。这可以防止线程丢失 在等待一个关键部分时死锁 已经拥有了。每次线程都会进入临界段 EnterCriticalSection和TryEnterCriticalSection成功。线 必须在每次进入时调用LeaveCriticalSection一次 临界截面 作为 线程拥有关键节的所有权后,可以对EnterCriticalSection或TryEnterCriticalSection进行额外调用,而不会阻止其执行。这可以防止线程在等待它已经拥有的关键部分时自行死锁。每次EnterCriticalSection和TryEnterCriticalSection成功时,线程都会进入临界区。线程每次进入临界区时必须调用LeaveCriticalSection一次