suche Mutex (locking)

soox

New member
Suche eine möglichkeit wie ich mehrere requests synchronisieren kann, damit ich bei gliechzeitigen requests nicht gleichzeitig auf die gleiche recource zugreife.

das einzige was ich gefunden habe ist: http://ch2.php.net/manual/de/ref.sem.php

wenn möglich möchte ich was, was immer verfügbar ist und nicht nur, wenn man das mit einkompiliert bzw das modul lädt.

mein konkretes problem:
ich habe daten die ich irgendwie abspeichern muss (keine db zur verfügung). diese daten werden von zeit zu zeit verändert und somit neu geschrieben. dabei wird so vorgegangen:
1) daten einlesen
2) vom user gewünschte änderungen ausführen
3) bei den daten den entsprechenden status ändern (aufgrund der aktion)
4) daten zurückschreiben

das problem entsteht beim zurückschreiben, wenn mehrere prozesse "gleichzeitig" die daten einlesen. jeder request hat nur seine sicht der änderungen und trägt nur diese ein. ohne locking würden die anderen parallelen änderungen verloren gehen.

wohin/wie die daten gespeichert werden, ist mir eigentlich egal. jedoch habe ich wie oben bereits gesagt keine db zur verfügung.

hoffe ich habe mich verständlich ausgedrückt.
 

Chakky

Member of Honour
ok ich hab ne theorie...

wenn du die datein öffnest kannst du doch den timestamp holen wann die datei zuletzt geändert wurden is,

diesen vergleichst du jetztt beim rückschreiben mit den aktuellen.

wenn sich in der zeit was geändert hat an der datei gibst du eine fehlermeldung aus und fragst den user wie weiter vorgegangen wird ->überschreiben/ranhängen/anzeigen

und dann das spiel von vorne?


ich hoffe ich hab das problem verstanden :)
 

soox

New member
funktioniert nicht, wenn z.b. die beiden prozesse (bzw anfragen) wie folgt abgearbeitet werden

Code:
Proc1			| Proc2
timestamp lesen		| 
			| timestamp lesen
datei auslesen		| 
daten verarbeiten	| 
timestamp neu auslesen	| 
			| datei auslesen
			| daten verarbeiten
			| timestamp neu auslesen
			| daten schreiben
daten schreiben		|
was ich brauche ist eine "atormare" funktion welche mir sowas bietet
 

hamill

New member
sowas hies früher lock manager, manchmal sogar Transaktionsmanager :)

billigere Lösungen:
SQLite. das macht afaik ein ziemlich billiges locking: es kann immer nur einer schreiben.
oder Du machst es wie früher bei unix mit lock files: Dein Program schreibt seine process id (die ist bei unix eindeutig und nur einmal vergeben) in eine Datei, zb /tmp/soox.lock, macht seine Arbeit, und löscht die Datei anschließend. Sieht Dein Programm in /tmp/soox.lock eine Nummer, die ungleich der eigenen process id ist, wartet es.
 

soox

New member
suche eigentlich etwas ganz banales damit das auch bei minimalem php funktionsumfang funktioniert. aber so wies scheint, bin ich da mit SQLite am besten beraten.
 
Oben