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