c + + - Tråd 1 læser fra fil som tråd 2 skriver til samme fil

Indlæg af Hanne Mølgaard Plasc

Problem



Tråd 1 (T1) opretter filen ved hjælp af


FILE *MyFile = tmpfile();


Tråd 2 (T2) begynder derefter at skrive til filen. Mens tråd 2 skriver, læser tråd 1 lejlighedsvis fra filen.


Jeg sætter det op således, at T2 midlertidigt suspenderes, når T1 læser, men da T1 kun nogensinde læser en del af filen T2, vil den ikke skrive til (filen er skrevet i rækkefølge), undrer jeg mig, om det er nødvendigt at suspendere T2 . Jeg ved, at dette ville være OK, hvis FILE blev erstattet af fast størrelse array/vector. Bare spekulerer på, hvordan disk adskiller sig fra hukommelsen.


Redigere.


Skrifterne er færdige med fseek og fwrite. Læsningerne er gjort ved hjælp af fseek og fread. Jeg antog det var en given men måske ikke fra nogle af kommentarerne. Jeg antager, at hvis T1 fseeks til position X samtidig med at T2 fseeks til position Y, hvem ved hvor den næste læsning eller skrivning starter fra. Vil tage et kig på rør, tak for hjælpen.

Bedste reference


Blanding læser og skriver på en fil er ikke engang sikker, når man beskæftiger sig med en enkelt tråd. Fra manens side af fopen:



  Læs og skriv kan blandes på læse/skrive strømme i enhver rækkefølge. Bemærk at ANSI C
         kræver, at en filpositionsfunktion intervenerer mellem output og input, medmindre en input
         operationen møder slutningen af ​​filen. (Hvis denne betingelse ikke er opfyldt, er det tilladt at læse
         returnere resultatet af at skrive andet end det seneste.) Derfor er det god praksis (og
         faktisk nogle gange nødvendigt under Linux) at sætte en fseek (3) eller fgetpos (3) operation mellem
         skrive og læs operationer på en sådan strøm. Denne operation kan være en tilsyneladende no-op (som i
         fseek (..., 0L, SEEK\_CUR) opfordrede til sin synkroniserende bivirkning).



Så lad os ikke antage at læse og skrive er magisk synkroniseret til dig og beskytte adgangen til filen med en mutex.