如下代码,我分了两个线程计算collision函数,希望两个线程同时进行计算以减少一半的计算时间(双核计算机)。
但是在计算时,由于collision函数运算量过大,后续函数需要用到其计算结果时两个线程都还没计算完成。若将detach()改用join(),则不能提高它的计算速度。请问可以通过什么办法解决上述问题?
thread CollisionTest[2];//两个线程
for (int t = 0; t < 2; t++)
{
CollisionTest[t] = thread(collision, t);
CollisionTest[t].detach();
}
你需要进一步优化。看collision函数内部能不能再拆分成多个线程来处理提高并发能力
thread 创建时,线程就已经执行。区别在于后续遇到join,则主线程阻塞;遇到detach,则主线程不阻塞。
你的代码要改成join,且两个线程同步执行的话,应该这样:
thread CollisionTest[2];//两个线程
for (int t = 0; t < 2; t++)
{
CollisionTest[t] = thread(collision, t);
}
for (int t=0; t < 2; t++)
{
CollisionTest[t].join();
}