J'ai du code qui attend une opération d'écriture sur la mémoire partagée. Si personne n'écrit, il continue d'attendre.Trop de consommation de CPU par boost scoped_lock
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
...
}
Quand j'ai fait l'échantillonnage, j'ai découvert qu'il consomme environ 90% du CPU. Est-ce que quelqu'un peut m'aider à résoudre ce problème de performance? S'il vous plaît voir l'image ci-jointe.
Faites-vous autre chose ou ne faites-vous que profiler le verrou? A quoi ressemble le code 'quelque chose d'autre'? –
Sa lecture juste de la mémoire partagée dans quelque chose. J'ai profilé l'exécutable complet. – MacGeek
Cela n'aide pas beaucoup. Il est normal de prendre un verrou pour prendre * beaucoup * plus de cpu que de lire un int de la mémoire partagée. Vous le résolvez en rendant le verrou moins fin. –