Archivo concurrente de escritura

¿Cómo escribir en un archivo de texto al que pueden acceder múltiples fonts (posiblemente de forma concurrente) para garantizar que no se pierda ninguna operación de escritura?

Al igual que si dos procesos diferentes escriben en el mismo momento en el archivo, esto puede ocasionar problemas. La solución simple (no muy rápida ni muy elegante) sería bloquear el archivo al comenzar el proceso (crear un archivo .lock o similar) y liberarlo (eliminar el locking) mientras se realiza la escritura.

Al comenzar a escribir, verificaría si el archivo .lock existe y retrasaría la escritura hasta que se libere el archivo.

¿Cuál es el patrón recomendado a seguir para este tipo de situación?

Gracias

EDITAR Me refiero a procesos, como diferentes progtwigs de diferentes clientes, diferentes usuarios, etc., no subprocesos dentro del mismo progtwig

Considere el uso de una base de datos simple. Obtendrá toda esta seguridad incorporada relativamente fácil.

La forma más rápida de sincronizar el acceso entre procesos es usar Mutexes / Semáforos. Este hilo responde cómo usarlos, para simular un patrón de locking de lectura-escritor: ¿Existe un locking de lector / escritor con nombre global?

Sugiero usar el ReaderWriterLock. Está diseñado para varios lectores, pero garantiza que solo un escritor pueda escribir datos en cualquier momento de MSDN .

Me gustaría ver algo como el patrón de comando para hacer esto. La escritura concurrente sería una pesadilla para la integridad de los datos.

Esencialmente usa este patrón para poner en cola sus comandos de escritura para que se realicen en orden de solicitud.

También debe usar ReaderWriterLock para asegurarse de que puede leer el archivo mientras se produce la escritura. Esta sería una segunda línea de defensa detrás del patrón de comando, de modo que solo un hilo podría escribir en el archivo en un momento dado.

Puedes intentar bloquear también. Es fácil: “el locking garantiza que un subproceso no entre en una sección crítica mientras que otro subproceso está en la sección crítica del código. Si otro subproceso intenta ingresar un código bloqueado, esperará (bloqueará) hasta que se libere el objeto”.

http://msdn.microsoft.com/en-us/library/c5kehkcz%28VS.71%29.aspx

También le recomendaría que busque ejemplos de tener varios lectores y solo 1 escritor en una sección crítica aquí tiene un breve artículo con una buena solución http://arxiv.org/PS_cache/cs/pdf/0303/0303005v1.pdf

Alternativamente, puede mirar la creación de copias del archivo cada vez que se solicite y cuando llegue el momento de escribir cualquier cambio en el archivo que se combina con el archivo original.