Я отлаживал многопоточное приложение и нашел внутреннюю структуру CRITICAL_SECTION
. Я нашел элемент данных LockSemaphore
из CRITICAL_SECTION интересным.
Похоже, что LockSemaphore
- это событие auto-reset (не семафор, как следует из названия), и операционная система создает это событие молча, когда первый раз поток ожидает на Critcal Section
, который заблокирован каким-то другим потоком,
Теперь мне интересно, критическая секция всегда быстрее? Событие - это объект ядра, и каждый объект Critical section связан с объектом события, а затем Critical Section
может быть быстрее по сравнению с другими объектами ядра, такими как Mutex? Кроме того, как внутренний объект события влияет на производительность раздела Critical?
Вот структура CRITICAL_SECTION
:
struct RTL_CRITICAL_SECTION
{
PRTL_CRITICAL_SECTION_DEBUG DebugInfo;
LONG LockCount;
LONG RecursionCount;
HANDLE OwningThread;
HANDLE LockSemaphore;
ULONG_PTR SpinCount;
};