C++:丢弃线程与线程池

C++ : Throw Away threads vs Thread Pool

所以我的 opengl 应用程序中有一个主应用程序线程,其中包含所有渲染和内容。现在我需要一些非常繁重的计算,大约需要 2 3 秒,所以我将它移到一个单独的线程,这是我管理它的方式:

 std::atomic<bool> working = false;

 void work(){
     if(!working)
     {
         working = true;
         std::thread worker(do_work);
         worker.detach();
     }
     else
     {
         // Some Updations
     }
 }

 void do_work()
 {
     // The actual work
     // working = false;
 }

现在我每帧都调用工作,实际工作会在前一帧完成后自动分派。

现在我的问题是有什么方法可以对此进行优化? 我想到的一些想法是有一个线程池,但我不确定这是否值得麻烦实施?或者还有其他方法吗?

您可以按照某些人的建议使用 std::launch。或者你可以为“c++ 线程池库”做一个 google,可能会找到一些东西等着你。

但现实很简单:编写线程池近乎微不足道,是一项很好的练习。所以你可以自己编写并学习一些东西。正如所建议的那样,您可以通过某种消息队列进行调度。

工作队列可以是任何类型的互斥锁和 cond_var - 管理的 FIFO,然后您可以有多个读取器和多个写入器。队列中的条目可以是任何类型的可运行或绑定函数(例如 lambda)。

写起来很有趣,你可以在未来几年里把它扔进你的个人图书馆。