Az Algol68 programozási nyelv

Párhuzamos feldolgozás



Az Algol68-ban van némi párhuzamosság-kezdemény is. A nyelv tervezői szándékosan nem definiáltak néhány dolgot, például egy kétoperandusú operátor operandusai kiértékelésének a sorrendjét. Ezáltal azt szerették volna elérni, hogy a fordítóprogramok írói kihasználhassák az esetleges multiprocesszoros architektúrákban rejlő lehetőségeket. A párhuzamos klóz olyan begin end pár közé írt, vesszőkkel elválasztott unitokat tartalmazó lista, melyben az egyes unitok kiértékelődésének a sorrendje nem definiált. Ha az alábbi programban:

begin int k := 0; ( k := k+1; k := k+1 ); end;

a két k := k+1 közötti pontosvesszőt vesszőre cseréljük, az eredmény nem feltétlenül lesz 2. A párhuzamos klózok tetszőleges mélységben egymásba ágyazhatók. Ezek segítségével azonban csak független, egymással nem kommunikáló processzek futtathatók. A szinkronizáció megvalósítására a nyelv bevezeti a Dijkstra-féle szemafort. A sema egy beépített mód, az up és a down pedig beépített operátorok, melyek a séma mód változóinak növelésére és csökkentésére szolgálnak. Ha szemaforokat használunk párhuzamos klózokkal, akkor a párhuzamos klóz nyitó zárójele vagy begin utasítása elé ki kell írni a par kulcsszót.
Pl. A termelő-fogyasztó probléma klasszikus megoldása:

begin sema mutex := level 1; bool not finished := true; # közösen használt puffer deklarációja # proc producer = void: while not finished do down mutex # pufferbe egy elemet # up mutex od; proc consumer = void: while not finished do down mutex # pufferből egy elemet # up mutex od; par (producer, consumer) ; end;