Теперь лучше понимаю вашу библиотеку. В принципе, если использовать только локальные переменные, то вообще ничего опасного нет. Опасности начинаются, если есть какие-то общие поля, например:
## Код:
```
PROCEDURE (c: Cor1) Do
  VAR x: INTEGER;
BEGIN
c.found := FALSE;
x := 0;
WHILE ~c.found DO
  x := x + 1;
  c.found := f(x) = 0;
  Co.Yield();
END;
END Do;
и
PROCEDURE (c: Cor2) Do
  VAR x: INTEGER;
BEGIN
c.found := FALSE;
y := 1;
WHILE ~c.found DO
  y := y - 1;
  c.found := f(y) = 0;
   Co.Yield();
END;
END Do;
```
