хотя в целом сейчас подумал что если сделать exclusive shared как выше скидывали, и сделать его на max long, и саму блокировку делать на пустой операции а не на той которую запускаю - то да, будет очень похоже
Не могли же они написать "Да, мы видели те бенчмарки. Нет, мы не бдем делать как в котах, потому что коты сломаны - вот пример". Пришлось растекаться мысью по древу
Проблема с "закрытием". Если операция закрытия должан дожидаться всех уже работающих внутри барьера, то семафор с "бесконечно много пермитов" - идеальное решение.
условно самое семантически близкое было бы сделать isOpenRef :Ref[Boolean] но не понятно как сделать isPausedRef.await(isOpen => isOpen) . который если в условии true - идет дальше, если false - "подписывается" на изменения ref и перевычисляет на каждое изменение, пока не получит true и не пойдет дальше вот нету у рефов такой штуки