Domanda

Tutte:

Sto scrivendo una soluzione di registrazione. Uno dei punti finali registro disponibili è un file di testo. Si supponga di voler scrivere sul file da più processi: ho potuto aprire condivisa, e utilizzare un mutex denominato per controllare l'accesso concorrente al fascicolo (assumendo tutto l'accesso verificato sulla stessa macchina). Ma poi ho cominciato a pensare async IO. All'interno di un processo, ho potuto utilizzare BeginWrite per emettere i miei scrive in modo asincrono. Che dire di cross-process, o problemi di cross-macchina? È async IO sicuro in quelle situazioni?

(supponendo che quando chiamo BeginWrite (), il buffer che contiene tutto passo che devono essere tenuti insieme in un "record" logico)

È stato utile?

Soluzione

Prima di decidere sulla async soluzione di IO, nota che molto spesso ciò che si pensa sarà una scrittura asincrona finisce per essere maneggiato in modo sincrono. Particolarmente importante per la soluzione di registrazione è un po 'nascosto in bocconcino asincrono Disk I / O appare come sincrono in Windows NT, Windows 2000 e Windows XP . ci Sepolto nella discussione è questa pepita:

"In Windows NT, qualsiasi operazione di scrittura su un file che si estende la sua lunghezza sarà sincrona".

Anche se dice che "Windows NT", la mia esperienza è stata che è vero per Windows 2000, Windows XP e Server 2003 pure. Credo che significava "NTFS" piuttosto che "Windows NT". Non ho ancora testato su Vista o Windows Server 2008.

L'articolo continua a fornire possibili soluzioni a tale limite. Presumo che lavorano, ma non ho effettivamente provato.

La soluzione più affidabile che ho trovato è quello di generare un filo che fa una scrittura sincrona. Tipo di un dolore al collo, vero, ma efficace.

Altri suggerimenti

Non sono sicuro di cosa si intende per male. Se si sta a guardia di accesso al file con un appropriato processo di mutex croce, poi anche con I / O asincrono, è sempre e solo avere la scrittura 1 processo per il file in un dato momento. Questo è presumendo si mantiene il mutex bloccato fino a quando l'async completa di I / O.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top