> -- Сергей Губанов писал(а):
> Это совсем не то. Здесь выход из ожидания произойдёт тогда когда кто-то установит переменную не_хотим_ждать в TRUE, а предложенный мной код подразумевает, что мы должны ждать только (надоело_ждать OR condition), в то время как переменная не_хотим_ждать после начала ожидания нас больше не интересует. Она нужна только для входа в ожидание, но не для выхода из него.

Все равно не понял. Нужное условие проверяется еще раз сразу после EXCWAIT.

> -- Сергей Губанов писал(а):
> Более того, этот код содержит ошибку: значение переменной condition внутри EXCWAIT может быть не равно её же значению в следующей после неё инструкции IF condition THEN, поскольку между выполнениями этих двух инструкций значение переменной condition могло быть изменено другим потоком.

Не могло оно быть изменено другим потоком, потому как проверка условия осуществляется с блокировкой доступа для других потоков и если проверка прошла, то блокировка не снимается до конца выполнения функции (или до конца действия блока EXCWAIT).

> -- Сергей Губанов писал(а):
> Вот ещё простой пример, который нельзя переписать с помощью EXCWAIT:

Этот пример как раз демонстрирует возможную проблему, которой хотелось бы избежать с помощью совмещения EXCLUSIVE и AWAIT - функция не закончила свои действия с состояниенм объекта, а другие потоки уже имеют к нему доступ. Я бы хотел в данном случае видеть декомпозицию на две отдельных функции, которые совершают законченные действия с объектом.