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

时间:2010-12-04 19:32:46

标签: multithreading stl queue

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

类中可能有一些mutable变量可能由多个线程写入?

1 个答案:

答案 0 :(得分:6)

如果对象从未任何方法进行修改,则不修改类数据的方法只是线程安全的。否则,另一个线程上的方法可以更改对象(在锁定下,正确)并在线程上调用queue::empty()而不获取锁定可能导致竞争条件(取决于其实现)。