我正在调试一个多线程应用程序,发现CRITICAL_SECTION
. 我发现LockSemaphore
CRITICAL_SECTION 的数据成员很有趣。
它看起来像是LockSemaphore
一个自动重置事件(不是顾名思义的信号量),操作系统在第一次等待Critcal Section
被其他线程锁定的线程时静默创建此事件。
现在,我想知道关键部分总是更快吗?事件是一个内核对象,每个关键部分对象都与事件对象相关联,那么Critical Section
与其他内核对象(如 Mutex)相比,如何更快?此外,内部事件对象实际上如何影响关键部分的性能?
这是 的结构CRITICAL_SECTION
:
struct RTL_CRITICAL_SECTION
{
PRTL_CRITICAL_SECTION_DEBUG DebugInfo;
LONG LockCount;
LONG RecursionCount;
HANDLE OwningThread;
HANDLE LockSemaphore;
ULONG_PTR SpinCount;
};