В.С. Белоус
,
В.А. Крищенко
,
Н.Ю. Рязанова
2
Рис. 2.
Потеря связи при попытке включения элемента
new_p2 в очередь
мьютексы, семафоры, спин-блокировки и т. п. Спин-блокировки реа-
лизуются через активное ожидание на процессоре — это значит, что
процессор тратит время на ее проверку. Мьютексы и семафоры яв-
ляются средствами блокировки процессов, и процессорное время не
тратится на проверку их занятости. В отличие от семафоров, мьютек-
сы могут освобождаться только тем потоком, который их удерживал
[1], поэтому поведение программ, использующих мьютексы, более
предсказуемо. На рис. 3 показан пример кода с использованием
мьютексов. Критическая секция кода начинается захватом мьютекса,
а заканчивается его освобождением. В результате код критической
секции становится атомарным или неделимым.
Рис. 3.
Использование мьютексов для реализации атомарности
Если поток пытается войти в критическую секцию, захваченную
другим потоком, то он будет заблокирован до тех пор, пока другой
поток не выйдет из критической секции.
Использование средств взаимоисключения приводит к другим
проблемам, основной из которых является взаимоблокировка потоков,
или тупиковая ситуация, возникающая из-за многократного захвата и
освобождения мьютексов в неправильной последовательности.
Обнаружение тупиков на мьютексах.
Средства обнаружения
тупиковых ситуаций для прикладных процессов в ОС Linux отсут-
ствуют. Своевременное обнаружение тупиков и последующая их
ликвидация является актуальной задачей в интерактивных системах и
системах реального времени.