Ecrire simultanément et de manière asynchrone dans un fichier avec MSVC?

Actuellement, j’utilise un seul thread et fseek / fwrite pour enregistrer les données dans un gros fichier en boucle. Mais bien sûr, l’économie est un goulot d’étranglement. Pour supprimer ce goulot d’étranglement, je pense pouvoir créer un thread pour l’écriture de fichier asynchrone, mais cela bloquera l’access au fichier dans le thread d’itération suivant.

Existe-t-il un moyen d’écrire simultanément et de manière asynchrone dans un fichier dans Visual C / C ++?

(OS est Windows)

Utilisez CreateFile (), SetFilePointer () et SetEndOfFile () pour créer et prédéfinir un fichier. Utilisez ensuite CreateFile () dans vos threads de travail pour ouvrir des descripteurs supplémentaires dans le fichier, SetFilePointer () pour rechercher les décalages souhaités, et WriteFile () pour y écrire. Tant que chaque appel à CreateFile () accorde des droits FILE_SHARE_WRITE, vous pouvez ouvrir plusieurs descripteurs avec des permissions GENERIC_WRITE à la fois. Chaque poignée conserve son propre pointeur dans le fichier.

Utilisez la fonction:

 CreateFileMapping 

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

pour mettre en mémoire le fichier de sortie en mémoire, vous pouvez ensuite écrire vos plusieurs threads simultanément dans la mémoire.

Plus d’informations sur les fichiers mappés de mémoire ici:

http://en.wikipedia.org/wiki/Memory-mapped_file

Les fonctions d’E / S asynchrones, telles que WriteFileEx , permettent un access simultané. Mais je ne vois pas comment vous pensez que cela va améliorer votre débit.