2010-12-04 45 views
5

爲什麼empty()函數在std::queue中不是線程安全的? (請參閱here。)不應該const函數總是線程安全的,因爲它是隻讀的?爲什麼std :: queue :: empty()不是線程安全的?不應該const函數是線程安全的?

也許可能有一些mutable變量在類中可能會被幾個線程寫入?如果對象是從未通過任何方法修改

+1

只讀函數本質上不是線程安全的。他們是安全的*如果沒有其他線程正在進行寫作*。 – jalf 2010-12-04 19:37:23

回答

5

方法不修改類的數據僅僅是線程安全的。否則,另一個線程上的方法可能會更改對象(正確鎖定下),並在您的線程上調用queue::empty()而不會獲取該鎖定可能會導致爭用條件(取決於其實現)。

相關問題