C++ boost作用域锁定导致CPU消耗过多

C++ boost作用域锁定导致CPU消耗过多,c++,macos,boost,mutex,boost-interprocess,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

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

    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

...
    }
Test*Foo::Get()
{
boost::进程间::作用域锁定锁(互斥);//互斥是boost::进程间::进程间互斥
如果(此->检查==0)
this->interprocessCondition.wait(lock);//interprocessCondition是boost::interprocess::interprocess\u条件
...
}
当我进行采样时,我发现它消耗了大约90%的CPU

有人能帮我解决这个性能问题吗?请参阅所附图片


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

您是否在做其他事情,或者只是分析锁?“其他东西”代码是什么样子的?它只是从某个东西的共享内存中读取。我分析了完整的可执行文件。这没有多大帮助。使用锁比从共享内存中读取int占用更多的cpu是正常的。您可以通过减少锁的细粒度来解决它。更多的调试指向
内联void sched_yield()
,对于windows它调用Sleep(1),但我找不到Mac的任何定义?90%CPU意味着什么?它是否会在一段时间内创建一个繁忙的循环,或者它实际上会让位于另一个进程?或者幸运的是,这取决于您想要实现什么;呼叫现在它非常漂亮。它会有任何副作用,除了我必须注意boost更新不会干扰代码外?@MacGeek,这将大大增加唤醒延迟。但是,boost在Windows中使用睡眠(1)?效果不应该是一样的吗?@MacGeek,在OSX上,
sleep(1)
等待一秒钟。在Windows上,
Sleep(1)
等待一毫秒。