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).