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

...
    }

サンプリングを行ったところ、CPUの約90%を消費していることがわかりました。

誰かがこのパフォーマンスの問題を解決するのを手伝ってもらえますか?添付画像をご覧ください。

スクリーンショット

4

1 に答える 1

6

boost::interprocess、残念ながら、多くのプラットフォーム(明らかにOSXを含む)でロックのビジーウェイトを使用しています。実際にスリープするプラットフォームに固有のロックを使用することをお勧めします。

于 2011-10-26T12:38:45.273 に答える