2010-12-04 6 views
5

Warum ist die empty() Funktion in std::queue nicht Thread-sicher? (Siehe here.) Sollte nicht const Funktionen immer threadsicher sein, da es schreibgeschützt ist?Warum ist std :: queue :: empty() nicht Thread-sicher? Sollte const nicht threadsicher sein?

Vielleicht gibt es möglicherweise mutable Variable in der Klasse, die von den verschiedenen Threads geschrieben werden kann?

+1

Schreibgeschützte Funktionen sind nicht von Natur aus threadsicher. Sie sind sicher *, wenn kein Schreiben von anderen Threads erfolgt *. – jalf

Antwort

5

Methoden, die nicht ändern Sie sind die Daten von einer Klasse nur threadsicher, wenn das Objekt nie ist durch modifizierte jede Methode. Andernfalls könnte eine Methode in einem anderen Thread das Objekt (unter einer Sperre, korrekt) ändern und queue::empty() auf Ihrem Thread aufrufen, ohne die Sperre zu erhalten, könnte (abhängig von seiner Implementierung) zu einer Race-Bedingung führen.