使用具有多线程组件的非线程安全组件(设计)

时间:2009-12-23 16:37:14

标签: multithreading design-patterns thread-safety

设计问题:

多线程组件中使用非线程安全组件(Collection,API,...)...

示例:

component1 :多线程套接字服务器,将消息发送给消息处理程序

component2 :从服务器处理邮件的非线程安全邮件处理程序

我的解决方案:

在服务器和消息处理程序之间添加线程安全组件(缓冲区),缓冲区将从服务器以多线程方式接收消息并将其发送到与单线程方式的消息处理程序相同的顺序

我的问题:

有更好的解决方案吗?适当的设计模式可能是代理管道

4 个答案:

答案 0 :(得分:5)

一个非常好的选择是使用Producer/Consumer模式。

在这种情况下,多线程套接字可以充当受保护缓冲区中的多个生成器,并且非线程安全消息处理程序可以完全同步地在其自己的线程中使用消息。这提供了一种非常干净的方式来处理这种情况。

答案 1 :(得分:3)

我个人喜欢“消息队列”方法:工作可靠,解耦特性好,易于实现。

答案 2 :(得分:3)

一种常见的方法是使用粗粒度锁保护非线程安全API或创建一个负责锁定的瘦包装

答案 3 :(得分:1)

取决于使Component2不是线程安全的原因 ......

根据需要创建component2的实例:
每个实例仅由一个线程访问,因此您的系统可能作为一个整体正常运行。你可以分析它是否正常......