Почему std :: queue :: empty () не является поточно-ориентированным?Разве const-функции не должны быть поточно-ориентированными? - PullRequest
6 голосов
/ 04 декабря 2010

Почему функция empty() в std::queue не является поточно-ориентированной? (См. здесь .) Разве функции const не должны всегда быть поточно-ориентированными, поскольку доступны только для чтения?

Может быть, в классе есть переменная mutable, которая может быть записана несколькими потоками?

1 Ответ

6 голосов
/ 04 декабря 2010

Методы, которые не изменяют данные класса, являются поточно-ориентированными, только если объект никогда не изменен любым методом.В противном случае метод в другом потоке может изменить объект (под блокировкой, правильно), и вызов queue::empty() в вашем потоке без получения блокировки может привести к состоянию гонки (в зависимости от его реализации).

...