2

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

    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。

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

截屏

4

1 回答 1

6

boost::interprocess,不幸的是,在许多平台(显然包括 OSX)上使用忙等待锁。您将需要使用您的平台本机的锁,该锁实际上处于休眠状态。

于 2011-10-26T12:38:45.273 回答