Mutex нужен в MSMQ? - PullRequest
       14

Mutex нужен в MSMQ?

2 голосов
/ 24 февраля 2010

Я просматриваю исходные коды из двух приложений, использующих одну очередь, используя MSMQ. Первое приложение имеет поток, который записывает в очередь, в то время как второе приложение имеет другой поток, который читает из очереди. Обычно, если вы реализуете свою собственную очередь, приложениям потребуется мьютекс при доступе к очереди, верно? Однако я не смог найти ни одного раздела мьютекса / критического в исходных кодах этих приложений. Я что-то пропустил? Или MSMQ не нуждается ни в каком мьютексе, поскольку он обрабатывается внутри, есть ли такая вещь?

1 Ответ

2 голосов
/ 24 февраля 2010

Документация MSMQ гласит:

Только следующие методы являются нитями безопасно: BeginPeek, BeginReceive, EndPeek (IAsyncResult), EndReceive (IAsyncResult), GetAllMessages, Peek и Receive.

MSMQ.Send () равен , а не по своей сути поточно-ориентирован.

Отправка является потокобезопасной, если вы всегда отправлять объект сообщения и никогда использовать отправить объект .NET напрямую. С помощью объект сообщения, кстати, всегда хорошая идея - так как она позволяет добавлять метка, тайм-ауты, возможность восстановления и все эти вещи, которые делают ваш MSMQ решение реальное решение для предприятия.

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);
        }
    }
}

От: Безопасен ли поток Send ()?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...