Самьюэл Алекс
Шрифт:
Чтобы создать исключающий семафор, нужно объявить переменную типа
Более простой способ создания исключающего семафора со стандартными атрибутами — присвоение переменной специального значения
Поток может попытаться захватить исключающий семафор, вызвав функцию
Функция
В листинге 4.11 представлена другая версия программы, работающей с очередью заданий. Теперь очередь "защищена" исключающим семафором. Прежде чем получить доступ к очереди (для чтения или записи), каждый поток сначала захватывает семафор. Только когда вся последовательность операций проверки очереди и удаления задания из нее будет закончена, произойдет освобождение семафора. Благодаря этому не возникает описанное выше состояние гонки.
Все операции доступа к совместно используемому указателю
Обратите внимание на то, что, если очередь пуста (т.е. указатель
Исключающий семафор блокирует доступ к участку программы, а не к переменной. В обязанности программиста входит написать код для захвата семафора перед доступом к переменной и последующего его освобождения. Вот как. например, может выглядеть функция, добавляющая новое задание к очереди: