Книга: Основы программирования в Linux

Теоретический пример

Теоретический пример

С помощью простого теоретического примера можно посмотреть, как действует семафор. Предположим, что у вас есть два процесса: proc1 и proc2, оба нуждающиеся в некоторый момент выполнения в монопольном доступе к базе данных. Вы определяете один бинарный семафор sv, который стартует со значением 1 и доступен обоим процессам. Далее обоим процессам нужно выполнить одну и ту же обработку для доступа к критической секции программного кода; эти два процесса могут быть двумя разными выполняющимися экземплярами одной и той же программы.

Оба процесса совместно используют переменную-семафор sv. Как только один процесс выполнил операцию P(sv), он получил семафор и может войти в критическую секцию программы. Второму процессу вход в критическую секцию запрещен, т.к., когда он попытается выполнить операцию P(sv), он вынужден будет ждать до тех пор, пока первый процесс не покинет критическую секцию и не выполнит операцию V(sv), освобождающую семафор.

Требуемый псевдокод у обоих процессов идентичен:

semaphore sv = 1;
loop forever {
 P(sv);
 critical code section;
 V(sv);
 noncritical code section;
}

Код на удивление прост, потому что определение операций P и V наделяет их большими функциональными возможностями.


Рис. 14.1 

На рис. 14.1 показана схема действующих операций P и V, напоминающих ворота в критических секциях программного кода.

Оглавление книги


Генерация: 0.055. Запросов К БД/Cache: 0 / 0
поделиться
Вверх Вниз