GOLOG wird nun durch die Möglichkeit, nebenläufige Prozesse zu modellieren, zu ConGOLOG erweitert. Zunächst werden wir den Begriff Nebenläufigkeit in diesem Zusammenhang definieren [19]. Die Ausführung zweier nebenläufiger Prozesse ( und ) wird als verschachtelte Sequenz der primitiven Aktionen der komplexen Aktionen angesehen, also zum Beispiel im vorliegenden Fall wäre ein möglicher Plan . Es ist immer nur eine primitive Aktion aktiv. Diese Auffassung kann bei kontinuierlichen Aktionen wie zum Beispiel das Abspielen eines Musikstücks zu Problemen führen. Durch Aufsplittung des Einzelbefehls in eine Start- und eine Stopp-Aktion kann dieser Nachteil umgangen werden.
Wir wollen an dieser Stelle blockierte Prozesse in GOLOG betrachten und den Unterschied zu ConGOLOG herausstellen:
if then else , | synchronisierte Bedingung | |
---|---|---|
while do , | synchronisierte Wiederholung | |
( ), | nebenläufige Ausführung von und | |
( ), | nebenläufige Ausführung, | |
dabei hat eine höhere Priorität als ; | ||
wird nur ausgeführt, wenn fertig oder | ||
blockiert ist | ||
, | nebenläufige Iteration, | |
vergleichbar mit nichtdeterm. Iteration, | ||
nur daß die einzelnen Iterationen ''gleichzeitig'' | ||
und nicht sequentiell abgearbeitet werden. | ||
< >, | Interrupts, | |
wird nur ausgeführt, wenn es die Kontrolle | ||
von den höheren Ebenen erhält und wahr | ||
ist; nach der Bearbeitung kann der Interrupt | ||
erneut ausgelöst werden. |
Die oben genannte Synchronisation ist die elementare Ausführung der Testaktion mit der ersten Aktion aus . Dieser Ansatz ist mit der atomaren test-and-set-Instruktion zur Programmierung von Semaphoren in nebenläufigen Systemen zu vergleichen [2].