возможно не очень понял вопрос, поскольку в обероне и его клонах новичок. Но.

ситуация похожа на такую.
для правильной реализации многопоточности и работы с эсклюзивно захватываемыми(залоченными) обьектами необходима функции
1. захвата - освобождения обьектов...ну типа lock, unlock.
2. дополнительная функция ожидания внутри участка, куда вошел тред монопольно. в самом прямом смысле эта необходимость возникает для эффективной реализации самой обычной очереди, в которую произвольное количество тредов могут класть обьекты и произвольное - извлекать.
тогда функция взять обьект из очереди корректно реализуется так.

1. тред старается захватить мьютекс очереди с нужным таймаутом. если мьютекс захвачен, тред работает с очередью монопольно и может ее модифицировать(например извлечь из списка очереди событие с его верхушки). Но если очередь пуста тред должен мьютекс освободить и встать в ожидание некоего сигнала - "кто-то положил в очередь обьект".
можно тупо конечно выйти, уснуть и снова попытаться захватить мьютекс и проверять непустоту очереди. но это дейстивтельно тупо, поскольку исключительно неверно для event-driven модели. за такую реализацию очереди в приличных коллективах следует убивать.
единственным средством реализации нужной функциональности является некий обьект синхронизации на который можно вставать треду с разлочиванием залокнутого им мьютекса. причем это делается атомарно и операция - разлочивание мьютекса и вставание в ожидание сигнала(события) не могут прерываться другим тредом. если такой функциональности нет, ее невозможно смоделировать остальными средствами синхронизации.
кто не верит, может посмотреть как в ваших многопоточных системах реализована базовая очередь. она должна быть реализована именно с этими фичами.

итак есть две принципиально разные функциональности как минимум
1. обеспечение монопольной работы треда с пассивным обьектом - это лок, анлок мьютекса обьекта.
2. передача синхронизирующих сигналов между тредами, ну например ожидания тредов на обьектах типа флаг, сигнал и проч. лабуда.
из пересечния этих двух функциональностей возникает необходимость
использовать сигналирование(п2) внутри залоченных участков(п1). то есть, как раз, атомарная операция - анлок участка и вставание на сигнал.

кстати это единственное, часто непонятное для несталкивающихся, место в кухне синхронизации тредов.
больше ничего особо мудрого там нет.