C++ 从执行boost::fibers中排除一个线程

C++ 从执行boost::fibers中排除一个线程,c++,multithreading,boost,boost-fiber,C++,Multithreading,Boost,Boost Fiber,我正在创建一个多线程程序,在执行实际执行繁重的代码时,它高度依赖于boost::fibers 我想要实现的目标: 我的主线程知道何时激活和运行哪个光纤,以及何时收集光纤执行后提供的未来。 由于我的软件运行在一个具有100多个内核的高度并行环境中,因此如果可能的话,我会启动尽可能多的工作线程。工作线程应该运行光纤调度程序,如boost::fibers::algo::work\u。因此,他们应该执行主线程生成的所有光纤 问题是什么: 由于我的主线程非常擅长为100多个工作线程创建和计时所有光纤,因此

我正在创建一个多线程程序,在执行实际执行繁重的代码时,它高度依赖于
boost::fibers

我想要实现的目标:

我的主线程知道何时激活和运行哪个光纤,以及何时收集光纤执行后提供的未来。 由于我的软件运行在一个具有100多个内核的高度并行环境中,因此如果可能的话,我会启动尽可能多的工作线程。工作线程应该运行光纤调度程序,如
boost::fibers::algo::work\u
。因此,他们应该执行主线程生成的所有光纤

问题是什么:

由于我的主线程非常擅长为100多个工作线程创建和计时所有光纤,因此我希望避免主线程加入任何光纤的执行。 这意味着,我的主线程应该只关心启动光纤并在完成执行后收集它们的未来。 但是,我也不知道如何将我的主光纤排除在执行光纤之外

可能的、幼稚的解决方案: 尽管我不知道如何恰当地解决我的问题,我还是考虑了一些可能性

  • 创建我自己的光纤调度程序:调度程序是
    boost::fibers
    的一个定制点。因此,可能会创建一个自定义调度程序,将主线程排除在执行之外
  • 使用
    boost::fibers::buffered_通道
    在线程之间传输任务:但是,我不知道这是否是一个好的解决方案,因为这消除了使用光纤调度器的巨大可能性
  • 还有一个我还不知道的好方法:我想可能还有另一个简单的方法,不包括创建光纤的主线程,也不包括参与
    boost::fibers
  • 由于我是
    boost::fibers
    库的新手,我想知道实现我的目标的最佳方法是什么

    问候并感谢您的帮助