Семафоры |
Семафор это объект, хранящийся на сервере, в разделяемой области и служащий для синхронизации работы процессов. Семафоры характеризуются своим именем. Имя семафора должно удовлетворять соглашениям применяемым к именам идентификаторов в Атлантисе. Т.е. имя семафора должно начинаться с символа латинского алфавита, в имени допустимы латинские символы и цифры. Длина имени семафора не должна превышать 39 символа.Имена семафоров не различаются регистром используемых символов.
По времени жизни семафоры могут быть двух видов: постоянные и сессионные. Для того чтобы снять постоянный семафор требуется явный вызов функции ClearSemaphor. Постоянные семафоры могут быть очищены любым пользователем системы. Сессионные семафоры считаются выставленными только на время сеанса работы пользователя, установившего семафор. Кроме того, к ним применима функция ClearSemaphor. Снять сессионный семафор вызовом ClearSemaphor может только пользователь, установивший этот семафор. Количество одновременно выставленных в системе сессионных семафоров не должно превышать 100 (семафоры с одним и тем же именем, выставленные разными пользователями, считаются как один семафор). Не допускается комбинация постоянных и сессионных семафоров с одним и тем же именем.
Семафоры могут быть блокирующими и неблокирующими. Если выставлен блокирующий семафор, то никакой пользователь не сможет установить семафор с тем же именем. Для неблокирующих семафоров возможна многократная установка одного и того же семафора. Каждый вызов функции установки неблокирующего семафора увеличивает счетчик использования этого семафора. Вызов функции ClearSemaphor уменьшает счетчик использования. Семафор считается снятым, когда все пользователи довели счетчик использования своих семафоров до нуля. Это касается как сессионных, так и постоянных семафоров. Не допускается комбинация блокирующих и неблокирующих семафоров с одним и тем же именем.