Слишком большое потребление ресурсов процессора при повышении scoped_lock - PullRequest
2 голосов
/ 26 октября 2011

У меня есть код, который ожидает операции записи в общую память.Если никто не пишет, он продолжает ждать.

    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% процессорного времени.

Может кто-нибудь помочь мне решить эту проблему производительности?Пожалуйста, смотрите прикрепленное изображение.

Screen Shot

1 Ответ

6 голосов
/ 26 октября 2011

boost::interprocess, к сожалению, использует ожидание занятых блокировок на многих платформах (по-видимому, включая OSX).Вы захотите использовать встроенный в вашу платформу замок, который на самом деле спит.

...