Первый вариант.

Берём диссер Мюллера:
> -- Цитата:
> In Active Oberon, an AWAIT(b) statement, where  is an arbitrary boolean expression, is compiled into a helper procedure and an  system call.The helper procedure is equivalent to the following procedure, where the parameter specifies the frame pointer of the procedure containing the await statement and all references to local variables and object fields in the expression  are addressed relative to this parameter. A new name is generated for every helper procedure compiled and it can only be called by the runtime system. At the location of the await statement, the equivalent of the following code is compiled to perform the  system call. The helper procedure ($Condition) and the current frame pointer (FP) are passed to the runtime system so that it can later re-evaluate the condition [31]. The self reference to the associated object instance is also passed as parameter. The generation of the inline IF statement by the compiler is an optimization. Measurements made while the system was hosting its own development on a dual-processor machine have shown that this avoids on average 70-85% of  system calls. As a further optimization, the compiler could inline the condition in the IF statement, saving a procedure call at the cost of slightly more object code.Атомарность последнего оператора IF и вызывает сомнения.