An open API service indexing awesome lists of open source software.

https://github.com/nixel2007/semaphore


https://github.com/nixel2007/semaphore

oscript oscript-lib oscript-package oscript-web semaphore

Last synced: 11 months ago
JSON representation

Awesome Lists containing this project

README

          

# semaphore

Библиотека для организации "семафора" - инструмента ограничения одновременного выполнения участков кода в многопоточной среде.

## Классическое использование семафора

```bsl
// Однопоточный код, стартующий несколько потоков обработки чего-либо
КоличествоПотоков = 3;

Семафор = Новый Семафор(КоличествоПотоков);

// Запуск многопоточного кода
Для сч = 1 По 10 Цикл
ЗапускОтдельногоПотока(Семафор);
КонецЦикла;

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

// полезная нагрузка...

Семафор.Освободить();
КонецПроцедуры
```

## Использование пула семафоров

```bsl
// Процедура, выполняющаяся в отдельных потоках
//
Процедура ЗапускОтдельногоПотока()
КлючОперации = "Очень важный участок кода, который надо выполнять синхронно";
КоличествоПотоков = 1;
// Все потоки, получающие семафоры по ключу операции, получат один и тот же семафор с общим счетчиком.
Семафор = Семафоры.Получить(КлючОперации, КоличествоПотоков);

ТаймаутОжиданияВМиллисекундах = 1000;
Семафор.Захватить(ТаймаутОжиданияВМиллисекундах);

// полезная нагрузка...

Семафор.Освободить();
КонецПроцедуры
```