【问题标题】:What design pattern is this? It has to do with threads这是什么设计模式?它与线程有关
【发布时间】:2011-09-23 06:22:24
【问题描述】:

如果我错过了一个明显的答案,请原谅我,但我已经四处寻找,但找不到。我正在尝试构建一个尽可能少地使用互斥锁的多线程程序。以下是基本设计。我想知道我是否正在重新创建轮子,如果是的话,我不知不觉地借鉴了什么设计模式/算法/方法?

我有一个全局对象,它基本上是一堆线程的消息队列。每次创建线程时,它都会获得一个向其提交消息的函数。只有线程可以访问该函数。当一条消息被提交给函数时,该对象获取该消息并将其放入队列中。

这是一个 FIFO 队列,基本上用作线程间通信的共享内存。问题是,只有全局对象可以添加或删除消息。每个线程都会定期检查队列。每次找到它可以使用的消息时,它都会将消息复制到自身,然后向全局对象发出信号,表明它正在读取数据。如果一个线程查看了该消息并且不需要它,那么它仍然表示它已经阅读了该消息,但它不会复制它。当每个线程都查看完数据后,全局对象会删除该消息。

就是这样。这是基本的。它会吃掉内存。这只是为了避免锁定变量等。

【问题讨论】:

  • 如果您仔细考虑这一点,您会发现您需要某种同步和原子变量。您如何“表示您已阅读该消息”?您如何跟踪谁阅读了一条消息?魔鬼在细节中。
  • +1 用于在标题中提供设计模式的线索。当涉及到有关设计模式的问题时,这种情况很少见,请参阅相关列表。

标签: multithreading oop design-patterns memory-management


【解决方案1】:

It is a message bus。不要自己写,你的语言可能有一个框架。

【讨论】:

    【解决方案2】:

    您要查找的操作系统术语是消息传递。

    http://en.wikipedia.org/wiki/Message_passing

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-04
      • 2011-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多