多线程 – 为什么std :: queue :: empty()不是线程安全的? const函数不应该是线程安全的吗?

为什么std :: queue中的empty()函数不是线程安全的? (参见here.)const函数不应该始终是线程安全的,因为它是只读的吗?

也许在类中可能有一些可变变量可能由几个线程写入?

最佳答案
如果对象永远不会被任何方法修改,那么不修改类数据的方法只是线程安全的.否则,另一个线程上的方法可能会更改对象(在锁定下,正确)并且在线程上调用queue :: empty()而不获取锁定可能会导致竞争条件(取决于其实现).

转载注明原文:多线程 – 为什么std :: queue :: empty()不是线程安全的? const函数不应该是线程安全的吗? - 代码日志