Если поток работает с двумя ресурсами, доступ к которым должен выпоняться последовательно, то используется несколько критических секций. При работе с несколькими критическими секциями нужно соблюдать одинаковую последовательность входа и выхода из критической секции, иначе возможны взаимные блокировки потоков, например, в приложении определены две критические секции.
Critical_Section c1;
Critical_Section c2;
// поток 1
EnterCritical_Section(&c1);
EnterCritical_Section(&c2);
LeaveCritical_Section(&c1);
// поток 2
EnterCritical_Section(&c2);
EnterCritical_Section(&c1);
LeaveCritical_Section(&c1);
LeaveCritical_Section(&c2);
Возможна взаимная блокировка.
Interlocked(…) – смотри в MSDN.
InterlockedExchange(…). С помощью этой функции изменяются значения переменной.
InterlockedExchangeAda(…). Адрес переменной изменяет содержимое переменной.
22. Синхронизация потоков с объектами ядра. Ожидание завершения потока или процесса. Ожидание завершения нескольких потоков или процессов.