Dijkstras P- und V-Operationen gehören zu den ersten Synchronisierungsmechanismen, die einen gegenseitigen Ausschluß auf denkbar einfache Weise realisieren. So einfach wie sie sind, so problematisch können sie sein:
(* Partei 1 *) P(mutex1); P(mutex2); (* ... *) V(mutex2); V(mutex1); (* Partei 2 *) P(mutex2); P(mutex1); (* ... *) V(mutex1); V(mutex2);
Weitere Varianten nach den P- und V-Operationen von Dijkstra sind kritische Regionen (mit impliziten P- und V-Operationen) von Brinch Hansen in Concurrent Pascal, Pfad-Ausdrücke von Campbell und Habermann und Kapseln von Gehani in Concurrent C++. Wenngleich durch diese Verfeinerungen Deadlocks und das Verhungern eher vermieden werden können, bleibt die Trennung zwischen Synchronisierung und Kommunikation und damit der Zwang zur Nutzung gemeinsamer Ressourcen, um Informationen auszutauschen.