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