home   contents  previous      next        up

Семафоры

Семафоры можно применять для синхронизации как высоко, так и низко приоритетных процессов. Семафоры реализуются с помощью каналов. Функции управления семафорами отображаются в функции управления каналами. Поэтому эффективнее использовать непосредственно каналы.

Функции SemAlloc, SemInit и SEMAPHOREINIT (semaphore_h.html) создают и инициализируют семафор и его счетчик. Процесс, вызвавший функцию SemWait, приостанавливается, если счетчик семафора имеет значение 0, иначе значение счетчика семафора уменьшается на единицу, а процесс продолжает работу. Приостановленные процессы помещаются в очередь к семафору и не выполняются, пока какой-нибудь процесс не увеличит счетчик семафора. В результате выполнения функции SemSignal следующий процесс из очереди семафора может возобновить работу. Если очередь к семафору пустая, то значение счетчика семафора увеличивается на единицу.

Семафоры используются в реализации стандартных функций Си (например, malloc, free, signal) для управления обращениями сопроцессов к общим ресурсам.


home   contents  previous      next        up