2010-12-04 4 views
5

Pourquoi la fonction empty() dans std::queue n'est pas adaptée aux threads? (Voir here.) Les fonctions const ne doivent-elles pas toujours être adaptées aux threads, puisqu'elles sont en lecture seule?Pourquoi std :: queue :: empty() n'est pas thread-safe? Les fonctions const ne devraient-elles pas être thread-safe?

Peut-être qu'il peut y avoir une variable mutable dans la classe qui peut être écrite par les différents threads?

+1

Les fonctions en lecture seule ne sont pas intrinsèquement sûres. Ils sont sûrs * s'il n'y a pas d'écriture par d'autres threads *. – jalf

Répondre

5

Les méthodes qui ne modifient pas les données d'une classe ne sont thread-safe si l'objet est jamais modifié par toute méthode. Sinon, une méthode sur un autre thread pourrait changer l'objet (sous un verrou, correctement) et appeler queue::empty() sur votre thread sans acquérir le verrou pourrait conduire à une condition de concurrence (en fonction de son implémentation).

Questions connexes