消息队列与线程锁定

时间:2013-11-29 15:12:33

标签: c# multithreading thread-safety message-queue

我在.net技术上构建了一个Windows应用程序。在我的应用程序中,我收到来自不同线程的大量消息。一旦我收到消息,我需要调用一个应该是线程安全的函数。 我用过

lock (lockThis)
        {
            TSFunction(message);
        }

现在有人推荐我使用消息队列。我对这种方法并不熟悉,但我想选择更好的方法。 我应该切换到消息队列吗?如果是,那么有人可以指点我一些好的教程吗?

1 个答案:

答案 0 :(得分:1)

使用您当前的设计,无论何时处理消息,其他线程都会被完全阻止。如果这不是问题,那么谁在乎呢,对吗?

如果这困扰你(例如,你想提高响应能力),那么是的,消息队列将是一个好主意。您需要假定锁定,将消息放入队列,然后释放锁定(或找到为您执行此操作的线程安全集合)。然后你稍后处理这条消息。这样,消息发送线程将被阻止的时间可以忽略不计。

但请注意:消息处理将不同步。因此,例如,如果消息处理速度很慢,则线程可能会在处理之前发送多条消息。你可以决定是否允许这样做。这实际上使您的应用程序更少线程安全,而它可以表现更好(更少的等待时间)。

您甚至可以在线程池中执行消息处理,并行处理多个消息等。选项是无穷无尽的。