hi,
für ein paar meiner Anwendungen habe ich ein kleines Modul geschrieben, was numerische Werte, einem Key zugeordnet, verwaltet:
tie my %h, 'Counter', {-file => $file, -keys => ['foo','bar']};
# oder
tie my %h, 'Counter', {-file => $file, -incr => ['foo','bar']};
Mit -incr => [..] wird beim Initialisieren der Wert zum zugehörigen Key um eins erhöht, unabhängig davon können die Werte zur Laufzeit verändert oder weitergezählt werden. In der Datei, wo das gespeichert wird, können weitere Keys liegen, ein Zugriff ist jedoch nur über -keys|-incr => [..] möglich, also diejenigen Keys, die beim tie() angegeben sind. Einem versehentliches Ändern der Keys anderer Anwendungen wird so vorgebeugt.
Nun kann es ja sein, dass das Modul von allgemeinen Interesse ist, von daher ist es in der jetzigen Version möglich, in einer main() mehrere tie() auf einunddieselbe Datei folgen zu lassen ohne dass ein Deadlock entsteht; bisher hat das jedoch keinen Effekt und ich selbst sehe auch keinen Sinn darin, weil das dem Konzept zum exclusive Lock widerspricht, was dazu eingebaut wurde, dass die Daten konsistent bleiben:
main(A) liest Ziffer 3, erhöht auf 10 und schreibt zurück. Was nicht passieren darf: main(B) liest auch eine 3 in der Zeit, wo main(A) noch nicht zurückgeschrieben hat. Mit Lock_Ex wird das verhindert: main(B) darf erst lesen, wenn main(A) fertig ist und liest eine 10.
Eine Zulassung mehrfacher tie() mit einundderselben Datei stellt dieses Konzept in Frage und führt es ad absurdum.
Oder sieht das jemand anders?
Hotti
Mach die Fehler da, wo sie wiederzufinden sind, das erleichtert die Suche!