Simultané de l'écriture des fichiers
comment écrire dans un fichier texte qui peut être accédé par plusieurs sources (éventuellement en même temps une façon) veillant à ce qu'aucune opération d'écriture est perdu?
Comme, si deux processus différents sont écrit dans le même moment pour le fichier, ce qui peut conduire à des problèmes. Les simples solution (pas très rapide et pas très élégant) serait verrouillage d'un fichier alors que le début du processus (créez-en un .fichier de verrouillage ou similaire) et la libération (supprimer le verrou), alors que l'écrit est fait.
Lorsque l'on commence à écrire, je voudrais vérifier si l' .verrouiller le fichier existe et retarder l'écrire jusqu'à la fin du fichier est libéré.
Quel est le modèle recommandé à suivre pour ce genre de situation?
Grâce
MODIFIER
J'entends les processus, comme les différents programmes de différents clients, des utilisateurs différents et ainsi de suite, de ne pas les discussions au sein du même programme
OriginalL'auteur pistacchio | 2009-07-21
Vous devez vous connecter pour publier un commentaire.
Envisager l'utilisation d'une base de données simple. Vous obtiendrez tout cela intégré dans la sécurité relativement facile.
OriginalL'auteur DanDan
Le moyen le plus rapide de la synchronisation entre les processus est d'utiliser les Mutex /Sémaphores. Ce fil de discussion réponses sur la façon de les utiliser, pour simuler la lecture écrivain schéma de verrouillage:
Est-il nommé global verrou de lecture/écriture?
Kieveli - L'auteur veut des processus différents, donc - Mutex / Semaphoers sont les plus évidents, et c'est pourquoi j'ai écrit sur eux, si nous wold parler de threads, à la fois les mutex et les plus simples des constructions comme les ReadWriteLock du travail.
OriginalL'auteur Marcin Deptuła
Je suggère d'utiliser le ReaderWriterLock. Il est conçu pour de multiples lecteurs, mais n'assure qu'un écrivain ne peut écrivain données à tout moment MSDN.
Ne pas utiliser ni ;). ReadWriter des serrures, des Moniteurs (écluses) etc. ne sont pas capables d'inter processus de serrures, qui est ce que l'auteur voulait dire que je pense (Comme, si deux processus différents de rédaction dans le même instant, le fichier)?
N'utilisez pas de interprocessus de verrouillage. Passer à un OS qui fonctionne uniquement à un seul processus à la fois.
Oui, nous allons tous commencer à l'aide de MS-DOS
Ravadre, en effet, ils ne travaillent pas à travers le processus, cependant cette réponse était en place bien avant de le modifier. Je vais le laisser ici, mais au cas où quelqu'un d'autre bute sur la recherche de même des solutions de processus.
OriginalL'auteur Ian
Je ressemblerait à quelque chose comme le Modèle De Commande pour ce faire. Simultané de l'écriture serait un cauchemar pour l'intégrité des données.
Essentiellement, vous utilisez ce modèle de file d'attente de vos commandes d'écriture, de sorte qu'ils sont fait dans l'ordre de demande.
Vous devez également utiliser le ReaderWriterLock pour s'assurer que vous pouvez lire à partir du fichier lors de l'écriture se produit. Ce serait une deuxième ligne de défense derrière la commande de façon à ce que seul un thread peut écrire dans le fichier, à un moment donné.
Je voulais dire plus pour une seconde ligne de défense. Qui hind vue, je pense qu'il y a une meilleure façon de le faire que de l'aide de la RWL, mais je n'aimerais pas l'avoir prématurément optimiser malgré les performances des chutes de RWL. Cependant je commence à me demander si il voulait différents processus/applications accédant et en écriture à un fichier, et si oui, alors ces deux serait sans valeur.
OriginalL'auteur joshlrogers
Vous pouvez essayer de verrouillage de trop. Il est facile de "verrouillage assure qu'un thread ne pas entrer dans une section critique, tandis qu'un autre thread dans la section critique de code. Si un autre thread tente de participer à un blocage de code, il faudra attendre (bloc) jusqu'à ce que l'objet est libéré."
http://msdn.microsoft.com/en-us/library/c5kehkcz%28VS.71%29.aspx
En fait, l'aide moniteur (lock) est-il moins cher que ReaderWriterLockSlim.EnterWriteLock + ExitLock. Il est idéal pour une utilisation rw de verrouillage, lorsque vous avez peu de lecteurs et d'écrivains, mais dans ce cas, vous plutôt à ne pas lire à partir du fichier, c'est juste un fichier journal, vous aurez principalement en écriture, de sorte que vous aurez besoin d'utiliser WriteLocks seulement de toute façon -> donc, vous ne serez pas en mesure d'accéder simultanément à la ressource -> par conséquent, vous pouvez utiliser les verrouiller. Ne pas mentionner, que les deux ne fonctionnent pas pour l'inter processus de synchronisation.
OriginalL'auteur Broken Link
Je vous recommande aussi vous recherchez des exemples de plusieurs lecteurs, et seulement 1 de l'écrivain dans une section critique heres un court de papier avec une bonne solution http://arxiv.org/PS_cache/cs/pdf/0303/0303005v1.pdf
Sinon, vous pouvez consulter la création de copies de ce fichier à chaque fois qu'elle est demandée et, quand vient le temps d'écrire sur le fichier de la fusion avec le fichier d'origine.
OriginalL'auteur mbehan