【问题标题】:Why is std::queue::empty() not thread-safe? Shouldn't const functions be thread-safe?为什么 std::queue::empty() 不是线程安全的? const 函数不应该是线程安全的吗?
【发布时间】:2010-12-04 19:32:46
【问题描述】:

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

也许类中有一些mutable 变量可能会被多个线程写入?

【问题讨论】:

  • 只读函数本质上不是线程安全的。 如果其他线程没有写入,它们是安全的

标签: multithreading stl queue


【解决方案1】:

不修改类数据的方法只有在对象从不any方法修改时才是线程安全的。否则,另一个线程上的方法可能会更改对象(在锁下,正确),并且在您的线程上调用 queue::empty() 而不获取锁可能会导致竞争条件(取决于其实现)。

【讨论】:

    猜你喜欢
    • 2016-08-14
    • 1970-01-01
    • 2010-10-13
    • 2018-03-31
    • 1970-01-01
    • 2012-11-20
    • 2013-10-11
    • 2020-10-10
    • 1970-01-01
    相关资源
    最近更新 更多