Je consulte les codes sources de deux applications partageant une file d'attente à l'aide de MSMQ. La première application a un thread qui écrit dans la file d'attente tandis que la deuxième application a un autre thread qui lit dans la file d'attente. Ordinairement, si vous implémentez votre propre file d'attente, les applications auraient besoin d'un mutex lors de l'accès à la file d'attente, n'est-ce pas? Cependant, je n'ai pas trouvé de section mutex/critique dans les codes sources de ces applications. Ai-je manqué quelque chose? Ou MSMQ n'a-t-il pas besoin de mutex puisqu'il est géré en interne, y a-t-il une telle chose?Mutex nécessaire dans MSMQ?
2
A
Répondre
2
La documentation MSMQ stipule que:
Seules les méthodes suivantes sont fil sécurité: BeginPeek, BeginReceive, EndPeek (IAsyncResult), EndReceive (IAsyncResult), GetAllMessages, Peek et de réception.
MSMQ.Send() est pas intrinsèquement thread-safe.
Envoyer est thread-safe, aussi longtemps que vous toujours envoyer un objet de message et ne utilisation envoyer un objet .NET directement. En utilisant l'objet Message, BTW, est toujours une bonne idée - puisqu'il vous permet d'ajouter étiquette, délais d'attente, option récupérable et tout ce qui fait de votre solution MSMQ une véritable solution d'entreprise.
class Program { static MessageQueue outQueue; static void Main(string[] args) { outQueue = new MessageQueue(@".\private$\mtQueue"); for (int i = 0; i < 100; i++) { Thread thr = new Thread(new ThreadStart(MyThreadProc)); thr.Start(); } } static void MyThreadProc() { Message msg = new Message(); for (int i = 0; i < 100; i++) { msg.Label = string.Format("{0} : {1}", Thread.CurrentThread.ManagedThreadId, i); outQueue.Send(msg); } } }
Questions connexes
- 1. Mutex dans Win32
- 2. A propos mutex dans Vista
- 3. MSMQ Design Question
- 4. MsmqMessage <T> nécessaire?
- 5. Surveillance MSMQ
- 6. Moniteur MSMQ
- 7. boost :: mutex/Comment tester si un mutex est verrouillé
- 8. Sélection du mutex ou du mutex fictif à l'exécution
- 9. Redondance MSMQ
- 10. Évolutivité MSMQ
- 11. Autorisations MSMQ
- 12. Détection d'un Mutex périmé
- 13. Mutex Initialisation - (UNIX)
- 14. Mutex Stored Procédure
- 15. Lock, moniteur, Mutex
- 16. sémaphores Erlang (mutex)
- 17. Mutex non libéré
- 18. Win32 Mutex n'attend pas
- 19. Interprocess Mutex En Perl
- 20. Pluriel du mot "mutex"
- 21. Java mutex avec smp
- 22. C++ Wait For Mutex
- 23. utilisateur croisé C# mutex
- 24. Mutex ne fonctionne pas dans Vista
- 25. Mutex dans JNI utilisant Foundation NSLock
- 26. Comment utiliser un mutex dans Visual Basic
- 27. abonnez-vous à msmq
- 28. MSMQ n'invoquant pas COM
- 29. MSMQ avec priorités dynamiques
- 30. MSMQ 3.0/4.0 télécharger
Je ne suis pas sûr si je comprends bien votre dernière déclaration. Créez une instance distincte de la file d'attente sur chaque thread et laissez MSMQ gérer les messages provenant de différents threads - dois-je utiliser mutex pour cela? – jasonline
Oui, si je crée une instance distincte de l'objet MSMQ sur chaque thread, alors je n'ai pas besoin d'utiliser un mutex non? – jasonline
effectivement, après plus de creuser s'il vous plaît voir ma réponse à jour ... –