Мьютексы и критические секции
Мьютексы и критические секции одинаковы в том, как они влияют на планирование ждущих потоков, но различны по некоторым другим характеристикам. Эти объекты сравниваются в следующей таблице.
Характеристики |
Объект-мьютекс |
Обьект — критическая секция |
Быстродействие |
Малое |
Высокое |
Возможность использования за границами процесса |
Да |
Нет |
Объявление |
HANDLE hmfx; |
CRITICAL_SECTION cs; |
Инициализация |
hmtx = CreateMutex (NULL, FALSE, NULL); |
InitializeCriticalSection(&cs); |
Очистка |
CloseHandle(hmtx); |
DeleteCriticalSection(&cs); |
Бесконечное ожидание |
WaitForSingleObject (hmtx, INFINITE); |
EnterCrittcalSection(&cs); |
Ожидание в течение 0 мс |
WaitForSingleObject (hmtx, 0); |
TryEnterCriticalSection (&cs); |
Ожидание в течение произвольного периода времени |
WaitForSingleObject (hmtx, dwMilliseconds); |
Невозможно |
Освобождение |
ReleaseMutex(hmtx); |
LeaveCriticalSecliun(&cs); |
Возможность параллельного ожидания других объектов ядра |
Да (с помощью WaitForMultipleObjects или аналогичной функции) |
Нет |