Алгоритмы синхронизации потоков – семафоры, мьютексы и критические секции.
Синхронизация в пользовательском режиме:
Критическая секция – это часть программы, в которой код получает доступ к разделяемым ресурсам. Для того, чтобы исключить эффект гонок по отношению к ресурсу необходимо, чтобы только один процесс мог находиться в своей критической секции, т.е. критическая секция должна выполняться как атомарная операция. При создании критической секции используется тип:
CRITICAL_SECTION s;
При входе в критическую секцию поток должен вызвать функцию
EnterCriticalSection(& s);
…
При выходе из критической секции – функцию:
LeaveCriticalSection(& s);
Простейшая реализация критической секции с помощью запрета прерывания. Использование критической секции не исключает взаимной блокировки процессов (это недостаток). Реализация в пользовательском режиме выполняется достаточно быстро, но недостатком является активное ожидание потоков, когда они проверяют свои условия входа в критические секции и тратят впустую процессорное время.