Уважаемые специалисты,

В форумах этого сайта несколько раз проскакивало мнение, что цикл LOOP в Обероне является избыточным. Так ли это? Вот, например, рассмотрим многопоточное программирование, и пусть условие цикла должно вычисляться в критической секции:

## Код:
```
IMPORT
  SEM:=Semaphores;
...
CONST
  Count = ...
...
VAR
  ind:LONGINT; (* Глобальный счётчик для нескольких потоков *)
  S:SEM.SEMAPHORE;
...

PROCEDURE Proc; (* Процедура, выполняемая в нескольких потоках одновременно *)
  BEGIN
...
    LOOP

      SEM.Claim(S); (* Начало критической секции *)
      i:=ind;
      INC(ind);
      SEM.Release(S); (* Конец критической секции *)
      IF i>=Count THEN
        EXIT
      END;
...
    END; (* LOOP *)
...
  END Proc;

...

BEGIN
  SEM.Create(S,1);
FINALLY
  SEM.Destroy(S);
END ModuleName.
```


(Синтакстс XDS-Oberon)

Кажется, в такой ситуации WHILE или REPEAT - UNTIL не применимы?

С уважением,
GameHunter.