File Syncronität und Parallelität beim schreiben und lesen

From: Bernd Walter <ticso(at)cicely7.cicely.de>
Date: Tue, 8 Oct 2013 19:20:51 +0200

Ich habe folgendes vor:
An eine Datei Bytes anhängen mit:
 lseek(x, 0, SEEK_END);
 write(x, buf, nbytes);
 fsync(x)
Random lesen per:
 pread(x, buf, nbytes, offset);

Angenommen ich habe einen Prozess mit mehreren Threads.
Ich öffne die Datei einmal RW und schreibe in einem Thread, d.h.
ich habe keine Racecondition zwischen lseek/write.
Gelesen wird mit mehreren Threads.
Kann ich sicher sein, dass nach dem write(2) die Daten in allen
Lesethreads sofort per pread lesbar sind?
Kann ich davon ausgehen, dass die Threads bei Bedarf auch parallel von
der Platte lesen (entsprechendes IO-System vorausgesetzt), oder
serialisiert die Tatsache, dass ich mit der gleichen Datei arbeite
derzeit im Kernel?
Wie sieht es aus, wenn ich die Datei zwei mal öffne, z.B. weil ich den
Lesethreads einen Descriptor ohne Schreibrechte anbieten will?
Oder gar, wenn ich mit mehreren Prozessen arbeite?
Interessant wäre auch, ob das jeweilige Verhalten Standard ist, oder
außerhalb von FreeBSD mit Problemen (abgesehen von lseek64, ...) zu
rechnen ist.

-- 
B.Walter <bernd@bwct.de> http://www.bwct.de
Modbus/TCP Ethernet I/O Baugruppen, ARM basierte FreeBSD Rechner uvm.
To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Tue 08 Oct 2013 - 19:21:01 CEST

search this site