【发布时间】:2011-09-23 06:22:24
【问题描述】:
如果我错过了一个明显的答案,请原谅我,但我已经四处寻找,但找不到。我正在尝试构建一个尽可能少地使用互斥锁的多线程程序。以下是基本设计。我想知道我是否正在重新创建轮子,如果是的话,我不知不觉地借鉴了什么设计模式/算法/方法?
我有一个全局对象,它基本上是一堆线程的消息队列。每次创建线程时,它都会获得一个向其提交消息的函数。只有线程可以访问该函数。当一条消息被提交给函数时,该对象获取该消息并将其放入队列中。
这是一个 FIFO 队列,基本上用作线程间通信的共享内存。问题是,只有全局对象可以添加或删除消息。每个线程都会定期检查队列。每次找到它可以使用的消息时,它都会将消息复制到自身,然后向全局对象发出信号,表明它正在读取数据。如果一个线程查看了该消息并且不需要它,那么它仍然表示它已经阅读了该消息,但它不会复制它。当每个线程都查看完数据后,全局对象会删除该消息。
就是这样。这是基本的。它会吃掉内存。这只是为了避免锁定变量等。
【问题讨论】:
-
如果您仔细考虑这一点,您会发现您需要某种同步和原子变量。您如何“表示您已阅读该消息”?您如何跟踪谁阅读了一条消息?魔鬼在细节中。
-
+1 用于在标题中提供设计模式的线索。当涉及到有关设计模式的问题时,这种情况很少见,请参阅相关列表。
标签: multithreading oop design-patterns memory-management