Рис. 1. К проблеме взаимного исключения с использованием критических областей.
Во многих операционных системах средства синхронизации процессов относят к средствам межпроцессорного взаимодействия - Inter Process Communications (IPS), в которые входят также средства межпроцессного обмена данными.
Современным низкоуровневым решением проблемы взаимного исключения является использование семафоров Дейкстры (E.W.Dijkstra), 1965г. Семафор (semaphore) – это специальный тип переменных, которые могут принимать только неотрицательные значения, и над которыми определены только три следующие операции ( – переменная типа «семафор»):
· - операция инициализации семафора;
· операция - значение переменной уменьшается на единицу, если это возможно; операция интерпретируется как операция опускания (закрытия) семафора;
· операция - значение переменной увеличивается на единицу; операция интерпретируется как операция поднятия (открытия) семафора.
Если семафор закрыт (процессом 1, с помощью операции P(S)), то процесс 2, вызвавший операцию , ждет, пока семафор откроется (процессом 1, с помощью операции V(S)).
|
|
Любые процессы могут изменять состояния семафора только с помощью операций , . Выполнение операций , не может быть прервано. Во время выполнения операций , доступ к семафору других процессов запрещен.
Если одной и той же критической секции достигли несколько процессов, то они образуют очередь к семафору.
Простейшим семафором является двоичный семафор, который может принимать лишь два состояния – 0 и 1. Иногда двоичный семафор называют мьютексом (mutex – сокращение от mutual exclusion).