DIJKSTRA (75) propose deux constructions pour introduire le non déterminisme dans l'exécution d'un programme séquentiel. Ces deux structures de contrôle (alternative et répétitive) sont basées sur les commandes gardées.
<commandeGardee> ::= <garde> -> <listeCommandes>
<garde> ::= <expressionBooleenne>|<commandeEntree>|<commandeSortie>
<listeCommandes> ::= <commande>{;<commande>}*
<commande> ::= <instruction>|<commandeEntree>|<commandeSortie>
<commandeEntree> ::= <idProcessus>?<idMessage>
<commandeSortie> ::= <idProcessus>!<idMessage>
Une commande gardée ne peut être exécutée que lorsque la(le) garde est vrai(e). L'instruction (si elle existe) associée à la garde est exécutée, puis la liste de commandes associée.
Les structures de contrôles :
<ensembleCommandeGardees> ::= <commandeGardee>{[] <commandeGardee>}*
<alternative> ::= if <ensembleCommandeGardees> fi
<repetitive> ::= do <ensembleCommandeGardees> od
et leurs sémantiques.
Ce concept n'existe que dans peu de langages (ADA, CSP, OCCAM).