Bon, d'abord un peu d'arrière-plan. Nous avions besoin d'un verrou de lecture/écriture inter-processus. Nous avons décidé d'utiliser un fichier et de verrouiller le premier octet en utilisant LockEx et UnlockEx. La classe crée un fichier dans le dossier temporaire du système lors de sa création. Le fichier est créé avec l'accès readwrite et partage read | write | delete. Nous spécifions également DeleteOnClose afin de ne pas laisser de nombreux fichiers temporaires. Évidemment, AcquireReader et AcquireWriter appellent LockEx avec les options appropriées et les appels ReleaseLock UnlockEx.
Nous avons testé cette classe en utilisant une petite application que vous pouvez exécuter plusieurs fois et cela fonctionne parfaitement. L'application qui l'utilise a un problème, que nous avons réussi à reproduire dans une autre petite application de test. Dans le pseudo code, il estVerrou inter-processeurs Reader Writer (ou poignées de fichiers et accès refusés)
Create InterProcessReaderWriter Dispose InterProcessReaderWriter without acquiring any locks Launch a child process which takes a reader lock
La première fois que cela fonctionne, cela fonctionne très bien. Si vous tentez de l'exécuter à nouveau, alors que le processus fils de la première fois contient toujours le verrou, nous obtenons une exception UnauthorisedAccessException lorsque vous essayez d'ouvrir le fichier.
Cela semble être un problème d'autorisation, pas une violation de partage, mais tous les processus de ce scénario de test s'exécutent sous le même utilisateur. Quelqu'un a-t-il des idées?
J'ai remarqué l'autre question qui suggère d'utiliser un mutex et un sémaphore pour réaliser ce que nous voulons. Je pourrais changer notre implémentation, mais j'aimerais quand même savoir ce qui cause ce problème.
Nous essayons d'accéder au même fichier. Nous essayons d'implémenter quelque chose de similaire au fonctionnement de l'accès avec son fichier .ldb. Mais seulement un verrou par fichier, dans le cas le premier octet. – pipTheGeek