我已经尝试过多线程游戏引擎。为了举个例子,这里是我的代码的基本结构。
#include <thread>
int main() {
std::thread physics_thread;
std::thread particles_thread;
std::thread graphics_thread;
while (!shouldClose) {
physics_thread = thread(doPhysics, &someData1);
particles_thread = thread(doParticles, &someData2);
graphics_thread = thread(doGraphics, &someData3);
physics_thread.join();
particles_thread.join();
graphics_thread.join();
}
}
这是非常糟糕的做法吗?我在一个相当低功耗的系统上运行linux并且每次更新都创建这些线程非常便宜。但就所有平台而言,这只是一个坏主意吗?
另一方面,我试图不断地使用互斥锁和条件变量来运行工作线程,有时我可以让它工作,但对于我尝试的内容来说,这似乎很荒谬。实现。
答案 0 :(得分:0)
虽然这看起来很便宜,但事实并非如此。 线程需要一些繁重的工作,如果你知道你将再次需要它们(更不用说多次重复使用它们)了,你应该试着避免它。
经典的解决方案是使用线程池在您需要时立即执行任务,然后让工作人员一直睡到下一次。
拥有N个额外的睡眠线程的成本很低,不会影响应用程序的性能。
这是我写的一个简单但非常强大的单一标题thread pool library。