Библиотека для организации "семафора" - инструмента ограничения одновременного выполнения участков кода.
Пакет лежит в основном пуле хаба, а opm знает этот хаб по умолчанию: короткой формы достаточно.
opm install semaphoreСкачанный файл ставится командой opm install -f <файл> — сеть для этого уже не нужна.
Описание
semaphore
Библиотека для организации "семафора" - инструмента ограничения одновременного выполнения участков кода в многопоточной среде.
Классическое использование семафора
// Однопоточный код, стартующий несколько потоков обработки чего-либо
КоличествоПотоков = 3;
Семафор = Новый Семафор(КоличествоПотоков);
// Запуск многопоточного кода
Для сч = 1 По 10 Цикл
ЗапускОтдельногоПотока(Семафор);
КонецЦикла;
// Процедура, выполняющаяся в отдельных потоках
//
Процедура ЗапускОтдельногоПотока(Семафор)
ТаймаутОжиданияВМиллисекундах = 1000;
// Если одновременно выполняющихся потоков больше, чем 3
// (переменная КоличествоПотоков, с которой создавался семафор),
// то захват семафора будет ждать освобождения свободного потока.
// По истечению таймаута вызовется исключение.
Семафор.Захватить(ТаймаутОжиданияВМиллисекундах);
// полезная нагрузка...
Семафор.Освободить();
КонецПроцедуры
Использование пула семафоров
// Процедура, выполняющаяся в отдельных потоках
//
Процедура ЗапускОтдельногоПотока()
КлючОперации = "Очень важный участок кода, который надо выполнять синхронно";
КоличествоПотоков = 1;
// Все потоки, получающие семафоры по ключу операции, получат один и тот же семафор с общим счетчиком.
Семафор = Семафоры.Получить(КлючОперации, КоличествоПотоков);
ТаймаутОжиданияВМиллисекундах = 1000;
Семафор.Захватить(ТаймаутОжиданияВМиллисекундах);
// полезная нагрузка...
Семафор.Освободить();
КонецПроцедуры
В пакете README нет — показан README из репозитория, из ветки по умолчанию.