Take: Dateisperren im Dauereinsatz

Beitrag lesen

Moin,

ich mal wieder.
Ich schreibe grade an einer Webseite in PHP. Diverse Einstellungen, die im Frontend der Seite gemacht werden können, speichere ich in einer JSON Datei.
Meine Frage ist nun: wie gehe ich da am Besten vor? Ich habe mir eine File Klasse gebastelt die den Datei-IO regelt. Im Moment mache ich es so, dass ich einfach im Konstruktor die Datei mit LOCK_EX sperre, denn es könnten ja auch Schreibzugriffe stattfinden. Im Destruktor wird die Sperre wieder aufgehoben. Kann man das so machen? Irgendwie ist mir nämlich nicht so wohl dabei, aber ist das Premature Optimization?

Einige Ideen die ich hatte:
* Erstmal mit LOCK_SH sperren, erst auf LOCK_EX wechseln wenn wirklich ein Schreibzugriff kommt. Das Problem dabei: Angenommen ich lese Informationen ein (es wird erstmal LOCK_SH geholt) und schreibe sie dann verändert wieder zurück (erst dann mit LOCK_EX). Was passieren kann:

  1. Programm A liest ein
  2. Programm B liest ein (geht, weil Prgm. A nur LOCK_SH hält)
  3. Programm A versucht zurückzuschreiben mit LOCK_EX, muss aber auf B warten, da B LOCK_SH hält
  4. Programm B macht das gleiche => Deadlock.

* Im Konstruktor mit angeben, ob die Datei auch zum Schreiben geöffnet werden soll. Problem: erfordert mehr Logik in der Klasse die die Einstellungen speichert.

Für jedwede Meinungen und Anregungen bin ich dankbar! :)

Gruß,
Take