我有一些代码等待共享内存上的写操作。 如果没人写,则继续等待。
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。
有人可以帮我解决这个性能问题吗?请参阅附图。
答案 0 :(得分:6)
boost::interprocess
在许多平台上使用忙等待锁(显然包括OSX)。您将需要使用实际睡眠的平台本机锁。