我是新来使用conditional_variables,所以我可以很容易在这里做一些愚蠢的事情,但我使用boost线程而不是直接调用函数时,我得到了一些奇怪的表现。如果我将func上创建boost线程的那一行改为直接调用func,那么代码运行速度会快几个数量级。我已经使用升压线程池软件起飞源锻造的尝试和它没有什么区别...性能差与助推条件互斥
下面是代码:
#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;
}
我想创建和销毁线程将是问题的开销也让我尝试threadpools:只有boost :: thread 34秒,线程池7秒和函数调用.16秒。这是在增加循环长度以给出更大的数字之后... – 2012-08-16 02:17:15