Synchronisation des Shared Memory über Peterson Algorithmus
-
Hallo,
ich soll zwei komplett unabhängige Prozesse (also keins von beiden ist der Eltern- oder Kindprozess) miteinander über den Peterson-Algorithmus synchronisieren. Beide Prozesse wollen evtl. gleichzeitig auf ein Shared Memory Bereich zugreifen.Nun ist es aber so, dass es beim Peterson-Algorithmus globale Variablen gibt, auf die zugegriffen werden muss, damit die Synchronisation erfolgreich abläuft.
Die einzige Möglichkeit scheint mir, das über den Shared Memory Bereich zu machen.Nun meine Frage: Mir bleibt doch eigentlich nichts anderes übrig, wenn ich in den kritischen Bereich reinmöchte, evtl. in einer Schleife einen Teil des Shared Memory Bereichs einzulesen bis der kritische Bereich nicht mehr gelockt ist.
Ich frage mich, ob es beim Einlesen oder beim Schreiben der Variablen evtl. zu starken Verzögerungen kommen kann, so dass es evtl. doch zu einem Schreib-Lese-Fehler kommt (im konkrten Fall die turn-Variable).
Allerdings bleibt mir eigentlich kaum eine andere Alternative, oder?Was denkt ihr dazu?
L. G.
Steffo
-
Auf x86/AMD64 Architekturen sollte es mMn. kein Problem geben, da ist jedes Store ein Release und jedes Load ein Acquire.
Mit anderen CPUs evtl. schon, da müsstest du dann auf diverse Funktionen des OS, Compiler-Intrinsics oder evtl. die C++11 std::atomic Funktionen zurückgreifen.
-
Danke, für deine Antwort.
Dummerweise sollen wir das ganz normal in C programmieren.
Vielleicht komme ich heute Abend dazu das umzusetzen. Mal schauen, was dabei rauskommt...