gpt4 book ai didi

multithreading - 我应该使用哪种 boost 多线程设计模式?

转载 作者:行者123 更新时间:2023-12-03 12:57:18 25 4
gpt4 key购买 nike

我开始使用多线程 boost 来将我的程序移植到窗口(来自 linux 的 pthread)。有没有人熟悉它?关于我应该使用哪种模式的任何建议?

以下是要求:

  • 大多数时候我有很多线程使用不同的参数运行相同的东西,
  • 所有线程共享一个称为“关键内存”(一个数组)的内存位置
  • 在某些迭代中必须使用“障碍”进行同步
  • 如果可能,需要最高并行化,即所有线程具有相同优先级的良好调度(目前我让 CPU 完成这项工作,但我发现 boost 有线程池和 thread.schedule() 不确定我是否应该使用)

  • 对于pthread,一切都是函数,所以我不确定是否应该将它转换为对象,那有什么优势呢?。看完这篇教程有点疑惑 http://antonym.org/2009/05/threading-with-boost---part-i-creating-threads.html这么多选择使用...

    提前致谢

    最佳答案

    移植应该非常简单:

  • I have many threads most of the time running the same thing with different parameters,


  • 使用绑定(bind)不同参数的仿函数创建所需数量的线程,例如:
    boost::thread thr1(boost::bind(your_thread_func, arg1, arg2));
  • All threads shared a memory location called "critical memory" (an array)


  • 这里没什么特别的,只需使用 boost::mutex 来同步访问(如果您有特殊要求,也可以使用其他互斥锁类型)
  • Synchronization has to be done with a "barrier" at certain iteration


  • 使用 boost::barrier : http://www.boost.org/doc/libs/1_45_0/doc/html/thread/synchronization.html#thread.synchronization.barriers
  • requires highest parallelization if possible i.e good scheduling with same priority for all threads ( currently I let CPU does the job, but I find out that boost has threadpool with thread.schedule() not sure if i should use )

  • 中央处理器?可能你的意思是操作系统调度程序。这是最简单的解决方案,并且在大多数情况下令人满意。 threadpool 不是 boost 的一部分,而且我不熟悉它。 boost thread没有调度程序。
    我对您的任务及其并行化潜力一无所知,因此我认为它可以并行化到比您拥有的内核更多的线程。从理论上讲,要获得最高性能,您需要在线程数 = 内核数(包括虚拟内核数)之间顺利分配工作。这不是最简单的任务,您可以使用现成的解决方案。例如 Intel Threading Building Blocks (GPL 许可证)甚至 Boost Asio .尽管它的主要目的是网络通信,但 Asio 有它的调度程序,你可以将它用作线程池。只需创建最佳线程数(内核数?), boost::asio::io_service 对象并从所有线程运行它。通过 io_service::post() 将工作发布到线程池

    关于multithreading - 我应该使用哪种 boost 多线程设计模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4569545/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com