【问题标题】:Using a non-thread-safe component with a multithread component (Design)将非线程安全组件与多线程组件一起使用(设计)
【发布时间】:2009-12-24 00:58:27
【问题描述】:

设计问题:

多线程组件中/与多线程组件一起使用非线程安全组件(集合、API...)...

示例:

component1 : 一个多线程 socket server 发送消息...到消息处理程序

component2 :一个非线程安全的消息处理程序,它处理来自服务器的消息......

我的解决方案:

在服务器和消息处理器之间增加一个线程安全的组件(buffer),buffer会以multithread的方式接收来自服务器的消息,并在单线程方式与消息处理程序相同的顺序

我的问题:

有没有更好的解决方案?合适的设计模式可能是 proxypipeline

【问题讨论】:

    标签: multithreading design-patterns thread-safety


    【解决方案1】:

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

    在这种情况下,多线程套接字可以作为多个生产者进入受保护的缓冲区,并且您的非线程安全消息处理程序可以在其自己的线程中完全同步地使用消息。这为处理此类场景提供了一种非常简洁的方法。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        一种常见的方法是简单地使用粗粒度锁保护非线程安全的 API,或者创建一个瘦包装器来处理锁定

        【讨论】:

          【解决方案4】:

          取决于 是什么让 Component2 不是线程安全的 ...

          根据需要创建组件 2 的实例:
          每个实例只能由一个线程访问,因此您的系统可能作为一个整体正常运行。你可以分析一下是不是ok...

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-11-18
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-03-30
            相关资源
            最近更新 更多