Parallel in Datei schreiben?
-
Hallo,
Ich schreibe gerade ein Programm, das parallel Daten in eine Datei schreiben soll.
z.B:
Prog1 lese, verarbeite -> schreibe Datei1
Prog2 lese, verarbeite -> schreibe Datei1
wenn die Programme gleichzeitig auf die Datei zugreifen, kann es passieren, dass Daten verloren gehen, oder gibt es sicherheits routinen (schreibe: an Datei anhängen) die es ermöglichen gleichzeitig die Datei zu öffnen und parallel zu schreien?
oder: wie kann ich solche Probleme am Besten umgehen?
thx 4 u Help
-
In Dateien zu schreiben ist einer der klassischen Anwwendungsfälle für gegenseitigen Ausschluß. Du wirst immer Probleme bekommen, wenn zwei Programme gleichzeitig in eine Datei schreiben, da der OS-Scheduler normalerweise nichtdeterministisch umschaltet. Programm 1 will eigentlich "abcdefg" schreiben, wird aber nach dem "d" zugunsten von Programm 2 abgewürgt. P2 schreibt nun "123456", wird aber wiederrum nach "4" Schlafen gelegt. Nun schreibt P1 seinen Teil zu ende, danach ist wieder P2 dran. In der Datei steht nun "abcd1234efg56", obwohl "abcdefg123456" drinstehen sollte. Die Ergebnisse werden sich bei fast jedem Durchlauf unterscheiden.
Hilft also nichts, du musst, wenn du wirklich nur "abcdefg123456" zulassen möchtest, sicherstellen, dass jedes Programm seinen Teil exklusiv schreiben darf.
Unter welchem OS soll das Programm laufen?
-
Hallo
Du darfst nicht gleichzeitig mehrmals schreibend auf eine Datei zugreifen. Du must das abwechselnd machen, am besten abgesichert durch eine Critical Section.
/Edit : zu spät... dummes Telefon
bis bald
akari
-
Das stimmt so im Allgemeinen nicht. Unter Unix beispielsweise ist ein write-Aufruf unterhalb einer bestimmten Größe atomar, d.h. er kann nicht unterbrochen werden. Aufpassen muss man bei gepufferter Ausgabe.
-
Stimmt, der Schreibvorgang kann atomic sein. Hab ich vergessen. Gilt aber nicht für jede Blockgröße!
-
datei_schreiben schrieb:
Hallo,
Ich schreibe gerade ein Programm, das parallel Daten in eine Datei schreiben soll.
z.B:
Prog1 lese, verarbeite -> schreibe Datei1
Prog2 lese, verarbeite -> schreibe Datei1
wenn die Programme gleichzeitig auf die Datei zugreifen, kann es passieren, dass Daten verloren gehen, oder gibt es sicherheits routinen (schreibe: an Datei anhängen) die es ermöglichen gleichzeitig die Datei zu öffnen und parallel zu schreien?
oder: wie kann ich solche Probleme am Besten umgehen?
thx 4 u Help
Du hast dein Betriebssystem nicht angegeben. Im Prinzip laeufts aber darauf hinaus, dass du dir selbst einen Lock erstellen musst. Ganz primitiv z. B.: du nimmst eine temporaere Datei als Lock:
Das Pogramm, das auf die Datei zugreifen will, schaut nach, ob es die Lock-Datei bereits gibt. Wenn nicht, dann erstellt es sie und greift (wenn das erstellen Erfolgreich war) auf die Datei zu, und loescht den Lock nachher wieder. Wenn die Lock-Datei bereits erstellt wurde, wartet das Programm so lange, bis das andere Programm den Lock wieder loescht.