2013-04-10 77 views
0

我目前正在探索的boost ::线程/线程池和线程本地存储基本达到一个数据报的副本到求职队列中的线程池。副本列表,池,线程设置(1:N)的/每个线程本地存储

当前设置使用1:1的设置,以松散耦合一个数据报从一个线程复制到另一个使用定制通知队列。该队列确实支持多个阅读器线程,但每个阅读器都会使用该消息。

我目前正在探索由thread_local_storage变异延长队列获得每个数据报复制到池中的每个线程的任务队列。

但我在想,如果升压可能已经支持这种操作的,尽管我coudln't发现任何东西。是否支持将单个副本提供给池中每个线程的本地存储?

非常感谢!

回答

0

为什么你想要的数据的副本,每一个线程?我能想到的唯一原因是,因为线程正在对其他线程看不到的数据进行更改。如果不做任何更改,只需将参考(aka指针)传递给每个线程的数据。如果必须进行更改,则还要传递对每个线程的引用,并让线程复制数据。如果您需要发布数据,当它不再使用时,请使用共享指针。

线程本地存储主要是用于模拟旧式静态变量。

+0

它是某种过滤器链......有N-> N-> N-> N ......许多不同的(依赖于运行时)实体对数据报进行迭代修改。在每个实体进行修改后,将它们推送到下一个实体。我希望不仅实现实体之间的1:1连接,而且实现1:n连接。使线程进行连接的问题在于工作队列。人们不知道每个线程是否有数据共享以及何时从实际队列中弹出()它们。 – Hhut 2013-04-10 10:47:45

+0

@Hhut然后使用共享指针指向你的数据报。将共享指针推送到必须处理该数据报的每个队列。如果数据报在n个队列上使用,则将共享指针推送到所有队列。如果一个线程需要更改数据报,让线程决定,让线程复制数据。工作线程获取数据报的唯一方法应该是从队列中弹出共享数据。 – 2013-04-10 10:54:51