[<<Previous Entry] [^^Up^^] [Next Entry>>] [Menu] [About The Guide]
 Обзор

Средства блокировки записей в файлах предназначены для координации
и синхронизации процессов, одновременно оперирующих с одной и той
же записью в файле. Этот раздел описывает более мощный механизм,
позволяющий координировать доступ к любому разделяемому ресурсу.
Этот механизм называется семафорами. Вы изучите системные вызовы,
которые создают семафоры, управляют ими и совершают операции над
ними.
Каждый из вас встречал семафоры в повседневной жизни. Например,
перекресток представляет собой разделяемый между двумя улицами
ресурс. В каждый момент через перекресток может проходить только
один транспортный поток. Светофор или регулировщик играют роль
"семафора", блокируя один транспортный поток и позволяя проходить
другому. Естественно, это должно делаться честно, чтобы оба
транспортных потока могли получать доступ к перекрестку за разумное
время. Автомобили, приближающиеся к заблокированному перекрестку,
выстраиваются и формируют очередь.
Изобретение семафоров приписывается Дейкстре, который предложил
этот механизм для координации доступа программ к разделяемому
ресурсу.
В операционной системе UNIX семафор представляет собой беззнаковое
короткое целое, разделяемое несколькими программами. Программисты
связывают со значениями этого числа определенный смысл, используя
семафоры при описании взаимодействия процессов.
Операции над семафорами - сложение и вычитание. Единственное
ограничение состоит в том, что значение не может стать
отрицательным. Если программа попытается сделать это, она будет
приостановлена. Обычно семафор инициализируется значением, равным
числу программ, которые могут иметь одновременный доступ к ресурсу.
Если, например, таким ресурсом является принтер, то значение
семафора должно быть 1, потому что принтер, как правило,
используется в каждый момент только одной программой. Если
программа хочет получить доступ к принтеру, она уменьшает значение
семафора на 1 операцией LOCK. Другая программа, пытающаяся печатать
на том же принтере, также попытается выполнить LOCK и
приостановится, так как значение семафора при этом стало бы
отрицательным. Второй процесс становится в очередь к семафору и
ждет, пока значение семафора не станет большим или равным 1. Это
случится, когда первая программа закончит печать и выполнит над
семафором операцию UNLOCK, увеличив его на 1. Теперь второй процесс
сможет выполнить LOCK и использовать ресурс, так как можно вычесть
1 из семафора, и он не станет отрицательным.
                           ЦЕЛИ РАЗДЕЛА
.    Описать семафоры
 . Научить пользоваться семафорами для синхронизации процессов