Работа потока с несколькими критическими секциями.

Если поток работает с двумя ресурсами, доступ к которым должен выпоняться последовательно, то используется несколько критических секций. При работе с несколькими критическими секциями нужно соблюдать одинаковую последовательность входа и выхода из критической секции, иначе возможны взаимные блокировки потоков, например, в приложении определены две критические секции.

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. Синхронизация потоков с объектами ядра. Ожидание завершения потока или процесса. Ожидание завершения нескольких потоков или процессов.