boost scoped_lock导致的CPU消耗过多

时间:2011-10-26 11:00:30

标签: c++ macos boost mutex boost-interprocess

我有一些代码等待共享内存上的写操作。 如果没人写,则继续等待。

    Test* Foo::Get() 
    {
        boost::interprocess::scoped_lock<boost::interprocess::interprocess_mutex> lock ( mutex ) ; // mutex is boost::interprocess::interprocess_mutex
        if ( this->check == 0 )
            this->interprocessCondition.wait ( lock ) ; // interprocessCondition is boost::interprocess::interprocess_condition

...
    }

当我抽样时,我发现它消耗了大约90%的CPU。

有人可以帮我解决这个性能问题吗?请参阅附图。

Screen Shot

1 个答案:

答案 0 :(得分:6)

遗憾的是,

boost::interprocess在许多平台上使用忙等待锁(显然包括OSX)。您将需要使用实际睡眠的平台本机锁。