c ++ - Samtidig og asynkront skrive til en fil med MSVC?

Indlæg af Hanne Mølgaard Plasc

Problem



I øjeblikket bruger jeg en enkelt tråd og fseek/fwrite for at gemme data i en stor fil i loop. Men selvfølgelig er besparelsen flaskehals. For at fjerne denne flaskehals tror jeg, jeg kan oprette en tråd til asynkron filskrivning, men dette vil blokere filadgangen i næste iterationstråd.


Er der nogen måde at samtidigt og asynkront skrive i en fil i Visual C/C ++?


(OS er Windows)

Bedste reference


Brug CreateFile (), SetFilePointer () og SetEndOfFile () til at oprette og forudbestemme en fil. Brug derefter CreateFile () i dine medarbejdertråde til at åbne ekstra håndtag til filen, SetFilePointer () for at søge de ønskede forskydninger, og WriteFile () for at skrive ind i den. Så længe hvert opkald til CreateFile () giver FILE\_SHARE\_WRITE rettigheder, kan du åbne flere håndtag med GENERIC\_WRITE tilladelser ad gangen. Hvert håndtag vedligeholder sin egen peger i filen.

Andre referencer 1


Brug funktionen:


CreateFileMapping


http://msdn.microsoft.com/en-us/library/windows/desktop/aa366537(v=vs.85).aspx[2]


til hukommelse kortlægge outputfilen til hukommelse, og så kan du få dine flere tråde til at skrive til hukommelsen samtidigt.


Flere oplysninger om hukommelseskortede filer her:


http://en.wikipedia.org/wiki/Memory-mapped\_file[3]

Andre referencer 2


De asynkrone IO-funktioner, såsom WriteFileEx, tillader samtidig adgang. Men det er ikke klart for mig, hvordan du mener dette vil forbedre din gennemstrømning. [4]