Thomas Schmieder: Probleme mit flock

Beitrag lesen

Hallo,

auf jeden Fall fängt auch jeder Thread mit dem Fehler an, dass eine Funktion benutzt wird, ohne ihr Ergebnis abzufragen.

$fh=fopen("dteiname","r+");
$lock=flock($fh, LOCKMODE);
if ($lock)
{

...

}
else
...

LOCKMODE      Bedeutung
   1          shared, readOnly       Alle dürfen lesen, keiner soll schreiben
   2          exclusive, write       Kein Anderer soll lesen oder schreiben
                                     der Lock-Setzer will gerade selber
                                     schreiben.
                                     Nur während des tatsächlichen Schreib-
                                     vorgangs anwenden!
   3          Freigabe               Eintrag asu der Lock-Tabelle nehmen
   4          Vormerkung             Es ist noch ein anderer Benutzer an der
                                     selben Datei. Es besteht also
                                     kokurrierender Betrieb

Musst Du mal über zwei Clients ausaprobieren, welche Möglichkeit des Einen welche Möglichkeit des Anderen mit false und welche mit true beantwortet.

Wenn ein 1-Lock gesetzt ist, dürfte eigentlich nienamnd anders ein 2-Lock setzen dürfen. Wenn Du also vernünftige Programme schreiben willst, dann müsstest Du als erstes immer erst einen 2-Lock setzen. Wenn der Klappt, dann sofort auf einen 1-Lock zurückschalten. Ab jetzt kannst Du jederzeit wieder auf einen 2-Lock hochschalten. (wenn sich alle an dieses Verfahren halten).

Es ist nämlich meiner Meinung nach möglich, dass zwei 1-Locks gleichzeitig gesetzt werden. Das musst du vermeiden. -> deadlock

Diese Strategie liegt übrinens auch dem LowLevel-Locking von DOS und WinDOS zugrunde.

Liebe Grüße aus http://www.braunschweig.de

Tom

--
Intelligenz ist die Fähigkeit, aus Fehlern Anderer zu lernen und Mut die, eigene zu machen.