【问题标题】:copy to a list, pool, set of threads (1:n) / each thread local storage复制到列表、池、线程集 (1:n) / 每个线程本地存储
【发布时间】:2013-04-02 01:34:45
【问题描述】:

我目前正在探索 boost::thread/threadpool 和线程本地存储,基本上是为了实现一个数据报的副本到线程池的作业队列。

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

我目前正在探索通过 thread_local_storage 变体扩展队列,以将每个数据报复制到池中每个线程的作业队列。

但我想知道 boost 是否已经支持这种操作,尽管我找不到任何东西。开箱即用的 boost 是否支持将单个副本复制到池中每个线程的本地存储?

非常感谢!

【问题讨论】:

    标签: threadpool boost-thread


    【解决方案1】:

    为什么要为每个线程提供一份数据副本?我能想到的唯一原因是,因为线程正在对其他线程不可见的数据进行更改。如果没有进行任何更改,只需将数据的引用(也称为指针)传递给每个线程。如果必须进行更改,也将引用传递给每个线程并让线程复制数据。如果需要释放数据,当不再使用时,使用共享指针。

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

    【讨论】:

    • 它是某种过滤器链...具有 N->N->N->N...许多不同的(取决于运行时)实体对数据报进行迭代修改。在每个实体中修改后将它们推到下一个。我希望不仅实现实体之间的 1:1 连接,还希望实现 1:n 连接。使线程建立连接的问题在于工作队列。不知道是否每个线程都有自己的数据共享,以及何时从实际队列中弹出()它们。
    • @Hhut 然后使用指向数据报的共享指针。将共享指针推送到必须处理此数据报的每个队列。如果数据报用于 n 个队列,则将共享指针推送到所有队列。如果线程需要对数据报进行更改,让线程决定并让线程复制数据。工作线程获取数据报的唯一方法应该是从队列中弹出共享数据。
    猜你喜欢
    • 2021-12-18
    • 2011-11-16
    • 1970-01-01
    • 2012-05-12
    • 2021-06-03
    • 1970-01-01
    • 2012-09-03
    相关资源
    最近更新 更多