целая переменная, у которой 0 означает неблокированное состояние, а
все остальные значения соответствуют блокированному состоянию.
Значение мьютекса устанавливается двумя процедурами. Если
процесс собирается войти в критическую секцию, он вызывает проце-
дуру mutex_lock. Если мьютекс не заблокирован (то есть вход в
критическую секцию разрешен), запрос выполняется и вызывающий
процесс может попасть в критическую секцию. Напротив, если
мьютекс заблокирован, вызывающий процесс блокируется до тех пор,
пока другой процесс, находящийся к критической секции, не выйдет
из нее, вызвав процедуру mutex_unlock. Если мьютекс блокирует
несколько процессов, то из них случайным образом выбирается один.
Одним из наиболее простых, удобных и интуитивных интерфей-
сов межпроцессного взаимодействия является буфер обмена. Буфер
обмена может содержать в себе один информационный объект –
фрагмент текста, рисунок и т. д. С помощью системного вызова
процесс может получить копию информации, содержащейся в буфере
обмена, или сам поместить объект в буфер, при этом старое
содержимое буфера теряется. Таким образом, программы получают
простой, но эффективный способ взаимного обмена информацией во
время своей работы.
Существенной проблемой синхронизации процессов являются
взаимные блокировки (взаимоблокировки) или тупики, называемые
также дедлоками (deadlock) или клинчами (clinch). Ниже описан
характерный пример взаимоблокировки.
Пусть двум процессам А и В, выполняющимся в режиме многозадачности, для
выполнения их работы нужно два ресурса, например, принтер и диск. И пусть после
того, как процесс А занял принтер (установил блокирующую переменную), он был
прерван. Управление получил процесс В, который сначала занял диск, но при
выполнении следующей команды был заблокирован, так как принтер оказался уже
занятым процессом А. Управление снова получил процесс А, который в соответствии
со своей программой сделал попытку занять диск и был заблокирован: диск уже
распределен процессу В. В таком тупиковом положении процессы А и В могут
находиться сколь угодно долго.
Процессы в зависимости от соотношения собственных скоростей
могут либо совершенно независимо использовать разделяемые
ресурсы, либо образовывать очереди к разделяемым ресурсам, либо
взаимно блокировать друг друга. Тупиковые ситуации следует
отличать от простых очередей, хотя те и другие возникают при
совместном использовании ресурсов и внешне похожи друг на друга:
процесс приостанавливается и ждет освобождения ресурса. Однако
Управление процессами в автономных
однопроцессорных вычислительных машинах