Семафоры как теоретическая конструкция
В информатике понятие семафор (semaphore) было впервые введено голландским теоретиком Е.В. Дейкстрой (E.W. Dijkstra) для решения задач синхронизации процессов. Семафор sem может рассматриваться как целочисленная переменная, для которой определены следующие операции:
p(sem) или wait (sem)
if (sem!=0)
уменьшить sem на единицу
else
ждать, пока sem не станет ненулевым, затем вычесть единицу
v(sem) или signal (sem)
увеличить sem на единицу
if (очередь ожидающих процессов не пуста)
продолжить выполнение первого процесса в очереди ожидания
Обратите внимание, что обозначения р и v происходят от голландских терминов для понятий ожидания (wait) и сигнализации (signal), причем последнее понятие не следует путать с обычными сигналами UNIX.
Действия проверки и установки в обеих операциях должны составлять одно атомарное действие, чтобы только один процесс мог изменять семафор sem в каждый момент времени.
Системный вызов semget