C ++中多线程程序的正确实现是什么(11)

时间:2014-12-17 05:55:41

标签: c++ multithreading

我有一个游戏程序,它需要每帧进行大量的AI计算,所以我认为如果我在每一帧中创建数百个线程是一个问题。这是我的解决方案(伪代码,简而言之,因为源代码太长了):

void AIThread(AIAdapter *ai)
{
    while (!exit)
    {
        condition_variable.wait(goThink);

        // AI calculation...
        ai->Think();

        // notify the main thread
        mutex.lock();
        done++;
        mutex.unlock();
        condition_variable.notify(doneOne);
    }
}

// Invoke it per frame
void MainThread()
{
    condition_variable.notify(goThink);
    while(done<taskCount)
        condition_variable.wait(doneOne);

    Update();
}

以下是问题:当最后一次AIThread完成时,它会通知MainThread并中断while循环并继续执行继续执行到下一个condition_variable.notify(goThink);。现在最后一个AIThread仍然留在if (!exit) goto Ready;并且没有收到通知并永远留在condition_variable.wait(goThink);。并且MainThread将永远保持while(done<taskCount)。我该怎么办?如何编写正确的代码?

0 个答案:

没有答案