Frank Schönmann: PHP / Shared Memory / Semaphoren

Beitrag lesen

hi!

  • Für das Problem mit gleichzeit lesen und schreiben werde ich wohl
    einen wie auch immer gearteten Locking-Mechanismus benötigen. Ich
    habe der Frage von CK entnommen, daß man da am blödsten
    irgendwelche Bits setzt, die aber selbst im SHM-Segment abgelegt
    sind. Wie kann ich aber sichergehen, daß in der Zeit zwischen
    auslesen des Bits und ausführen der Aktion auf dem Speicher nicht
    ein anderer Prozess das Bit umgekehrt hat (z.B. auf Schreiben
    verboten) und dann doch zwei Prozesse gleichzeitig im SHM
    rumschreiben?

Der Trick bei Semaphoren ist, dass man Funktionen verwendet, die
atomar sind, d.h. es wird garantiert, dass während diese Funktion
ausgeführt wird, kein anderer Prozess oder Thread dazwischenfunkt.
Ansonsten hast du recht: wenn es sowas nicht gibt, kann der von dir
beschriebene Fall auftreten.

Die zwei Funktionen, die man für Semaphoren braucht, bedeuten dann
soviel wie "setze eine Semaphore, wenn sie noch nicht gesetzt ist, und
mache dann weiter oder warte bis du die Semaphore setzen kannst" und
"gib die gesetzte Semaphore wieder frei". Alles, was dazwischen liegt,
hat dann exklusiven Zugriff auf was auch immer.

Ob PHP solche Funktionen hat, weiß ich gar nicht. Und mehr will ich
über Semaphoren gar nicht schreiben. Wenn möglich, schau in ein gutes
Buch, zb. "Moderne Betriebssysteme" von Tanenbaum oder eines über
Thread-Programmierung. Da sind verschiedene Mechanismen für das
Zusammenspiel mehrerer Threads/Prozesse detaillierter beschrieben.

bye, Frank!

--
Never argue with an idiot. He will lower you to his level and then
beat you with experience.