В языке Active Oberon имеется оператор AWAIT, который проверяет условие, и если оно ложно, блокирует процесс до тех пор, пока условие не станет истинным.

Эти два действия должны выполняться атомарно. Иначе если вытеснение произойдёт после проверки ложного условия, но перед блокировкой процесса, то вытеснивший процесс может установить условие и вытесненный ошибочно заблокируется на истинном условии.

Каким образом обеспечивается эта атомарность?