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.