autumn-synchronized

Модуль ОСени для синхронизации исполнения методов желудей

Использование

Допустим в вашем желуде есть какой-то критичный участок кода, который не должен исполнятся параллельно, и вы хотите сделать его потокобезопасным

// МойЖелудь.os

Процедура МойВажныйКод() Экспорт
    // Потокоопасный код
КонецПроцедуры

Что-бы сделать его потокобезопасным нужно создавать Блокировку, корректно блокировать и разблокировать участки кода:

// МойЖелудь.os

Перем Блокировка;

Процедура МойВажныйКод() Экспорт

    Блокировка.Заблокировать();

    Попытка
        // Потокоопасный код
    Исключение
        Блокировка.Разблокировать();
        ВызватьИсключение ИнформацияОбОшибке().ПодробноеОписаниеОшибки();
    КонецПопытки;

    Блокировка.Разблокировать();

КонецПроцедуры

Блокировка = Новый БлокировкаРесурса();

И вот чтобы не писать весь этот бойлерплейт вам поможет данный модуль, нужно добавить всего лишь аннотацию Синхронизировано и ваш метод магическим образом становится потокобезопасным!

// МойЖелудь.os

&Синхронизировано
Процедура МойВажныйКод() Экспорт
    // Потокоопасный код
КонецПроцедуры