我正在调试一个多线程应用程序,并发现了 CRITICAL_SECTION
的内部结构。我觉得 CRITICAL_SECTION 数据成员 LockSemaphore
很有趣。
它看起来像是一个自动重置事件(尽管名称中暗示了它是一个信号量),当第一次有一个线程等待被其他线程锁定的 Critical Section
时,操作系统会静默地创建这个事件。
现在,我想知道临界区是否总是更快?事件是核对象,每个临界区对象都关联着事件对象,那么相比于互斥体等其他内核对象,CRITICAL_SECTION
如何更快?此外,内部事件对象如何实际影响临界区性能?
下面是 CRITICAL_SECTION
结构:
struct RTL_CRITICAL_SECTION
{
PRTL_CRITICAL_SECTION_DEBUG DebugInfo;
LONG LockCount;
LONG RecursionCount;
HANDLE OwningThread;
HANDLE LockSemaphore;
ULONG_PTR SpinCount;
};