Question

Je surfe les codes sources de deux applications partageant une file d'attente à l'aide MSMQ. La première application a un fil qui écrit dans la file d'attente tandis que la deuxième application a un autre thread qui lit à partir de 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, non? Cependant, je ne pouvais pas trouver mutex / section critique dans les codes sources de ces applications. Je ne manque quelque chose? Ou ne MSMQ pas besoin de mutex car il est géré en interne, est-il une telle chose?

Était-ce utile?

La solution

La documentation MSMQ indique que:

  

Seules les méthodes suivantes sont fil   sécurité: BeginPeek, BeginReceive,   EndPeek (IAsyncResult),   EndReceive (IAsyncResult),   GetAllMessages, Peek et Recevoir.

MSMQ.Send () est pas intrinsèquement thread-safe.

  

Envoyer est thread-safe, aussi longtemps que vous   toujours envoyer un objet de message et ne   utiliser envoyer un objet .NET directement. En utilisant   l'objet du message, BTW, est toujours   bonne idée - car il vous permet d'ajouter   étiquette, les délais d'attente, l'option récupérable   et tout ce genre de choses qui font que votre MSMQ   solution 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);
        }
    }
}

De: est d'envoyer () thread-safe ?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top