我是使用 conditional_variables 的新手,所以我很容易在这里做一些愚蠢的事情,但是当我使用 boost 线程而不是直接调用函数时,我得到了一些奇怪的性能。如果我将在 func 上创建 boost 线程的行更改为直接调用 func,则代码会更快地运行几个命令。我已经尝试使用源伪造的 boost 线程池软件,它没有任何区别......
这是代码:
#include <boost/thread.hpp>
using namespace boost;
condition_variable cond;
mutex conditionalMutex;
int numThreadsCompleted = 0;
int numActiveThreads = 0;
void func()
{
{
lock_guard<mutex> lock(conditionalMutex);
--numActiveThreads;
numThreadsCompleted++;
}
cond.notify_one();
};
int main()
{
int i=0;
while (i < 100000)
{
if (numActiveThreads == 0)
{
++numActiveThreads;
thread thd(func);
//Replace above with a direct call to func for several orders of magnitude
//performance increase...
++i;
}
else
{
unique_lock<mutex> lock(conditionalMutex);
while (numThreadsCompleted == 0)
{
cond.wait(lock);
}
numThreadsCompleted--;
}
}
return 0;
}