Wenn ich eine einzelne Datei mit normalen IO-APIs lese und schreibe, ist garantiert, dass Schreibvorgänge pro Block blockweise sind. Das heißt, wenn mein Schreibvorgang nur einen einzigen Block ändert, garantiert das Betriebssystem, dass entweder der gesamte Block geschrieben wird oder gar nichts.Speicher Zugeordnete Dateien und atomare Schreibvorgänge von einzelnen Blöcken
Wie erreiche ich den gleichen Effekt für eine Memory-Mapped-Datei?
Memory-Mapped-Dateien sind einfach Byte-Arrays, also wenn ich das Byte-Array modifiziere, kann das Betriebssystem nicht wissen, wann ich einen Schreibvorgang für erledigt halte, also könnte es (auch wenn das unwahrscheinlich ist) Speicher gerade in der Mitte meines Blockschreibens, und in der Tat schreibe ich einen halben Block.
Ich würde eine Art von "Enter/Leave kritischen Abschnitt" oder eine Methode zum "Pinnen" der Seite einer Datei in den Speicher benötigen, während ich schreibe. Gibt es so etwas? Wenn ja, ist das portable über gemeinsame POSIX-Systeme & Windows?
Wie viele Anwendungen interagieren mit Ihrer zugeordneten Datei? – Justin
Nur ein Prozess, d. H. Der Datenbankserver. –