Как стать автором
Обновить

Комментарии 6

Очень интересная штука, есть информация о том как это работает в ECP-конфигурации?
Судя по документации, если задать семафору имя по правилам именования глобальных переменных, то он будет записан в глобальную область имен и, соответственно, будет доступен в ECP
Из описанного я не понял в чем преимущества семафора от просто $INCREMENT? Особенно в свете того, что для хранения остальной информации используются чистые глобали, а не хранимые классы.
Мы с таким же успехом можем инкрементировать глобаль ^Semaphor(Key) при логине и декрементировать при логауте.
Простой инкремент какой-то глобальной переменной без дополнительных телодвижений не дает возможности ограничить доступ к какому-то ресурсу. Вернее инкремент его вообще никак не ограничивает, он просто увеличивает/уменьшает значение переменной. С его помощью мы можем получить «реальное» значение какой-то переменной в результате работы с ней нескольких процессов. Но мы не можем поставить процессы в очередь и обрабатывать их запросы только после того, как уже работающие процессы завершатся.

В данном конкретном примере мы конечно можем
инкрементировать глобаль ^Semaphor(Key) при логине и декрементировать при логауте
но это нам не даст возможности ограничить доступ только 10 людьми одновременно и не поставит 11 (и так далее) человека в список ожидания.
Ok. То есть тут мы имеем еще дополнительный LOCK.
ИМХО, слишком много кода написано для демонстрации, что несколько запутывает.
Я так думаю там расшаренный LOCK, еще и HANG и циклическая обработка запросов.

Большинство кода отвечает за логирование и генерацию тестовых данных, чтобы было в принципе понятно как работать с семафором.
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.