공유 메모리에서 쓰기 작업을 기다리는 코드가 있습니다. 아무도 쓰지 않으면 대기합니다.boost scoped_lock에 의한 CPU 사용량이 너무 많음
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 %에 이르는 것으로 나타났습니다.
이 성능 문제를 해결할 수있는 사람이 있습니까? 첨부 된 이미지를 참조하십시오. 불행하게도, (분명히 OSX 포함) 많은 플랫폼에 대한 잠금을 위해 바쁜 대기 사용합니다
다른 작업을 수행 중이거나 잠금 설정을 프로파일하고 있습니까? '다른 코드'는 어떻게 생겼을 까? –
무언가에있는 Shared Memory에서 방금 읽는 중입니다. 완전한 실행 파일을 프로파일했습니다. – MacGeek
그건별로 도움이되지 않습니다. 공유 메모리에서 int를 읽는 것보다 로크를 사용하는 것이 정상입니다. 자물쇠를 덜 세밀하게 만들어 해결할 수 있습니다. –