Мьютексы и критические секции
Мьютексы и критические секции одинаковы в том, как они влияют на планирование ждущих потоков, но различны по некоторым другим характеристикам. Эти объекты сравниваются в следующей таблице.
Характеристики |
Объект-мьютекс |
Обьект — критическая секция | |||
Быстродействие |
Малое |
Высокое | |||
Возможность использования за границами процесса |
Да |
Нет | |||
Объявление |
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 или аналогичной функции) |
Нет |