В АО это так
## Код:
```
MODULE Philo;
IMPORT Semaphores;
CONST
    NofPhilo = 5; (* number of philosophers *)
VAR
    fork: ARRAY NofPhilo OF Semaphores.Sem;
    i: LONGINT;
TYPE
    Philosopher = OBJECT
        VAR
            first, second: LONGINT;
            (* forks used by this philosopher *)
        PROCEDURE & Init(id: LONGINT);
        BEGIN
            IF id # NofPhilo-1 THEN
                first := id; second := (id+1)
            ELSE
                first := 0; second := NofPhilo-1
            END
        END Init;
    BEGIN {ACTIVE}
        LOOP
            .... Think....
            fork[first].P; fork[second].P;
            .... Eat ....
            fork[first.V; fork[second].V
        END
    END Philosopher;
VAR
    philo: ARRAY NofPhilo OF Philosopher;
    BEGIN
        FOR i := 0 TO NofPhilo DO
        NEW(fork[i]);
        NEW(philo[i]);
    END;
END Philo.
```
