代码之家  ›  专栏  ›  技术社区  ›  Anycorn

C++互斥与一致性的正确性

c++
  •  34
  • Anycorn  · 技术社区  · 15 年前

    当方法本质上是只读的,但有可能需要修改的互斥锁/锁时,是否有约定?

    如果没有,如果这种方法 const

    谢谢你

    2 回复  |  直到 10 年前
        1
  •  52
  •   Craig M. Brandenburg Martin    10 年前

    可以使用关键字标记数据成员 mutable 允许在常量成员函数中修改它们,例如:

    struct foo 
    {
        mutable mutex foo_mutex;
        // ....
        void bar() const
        {
            auto_locker lock(foo_mutex);
            // ...
        }
    };
    

    尽量少做这件事,因为虐待 易变的 是邪恶的。

        2
  •  11
  •   Adrian McCarthy    13 年前

    我一般都可以 mutable 概念上的方法的锁和缓存 const .

    尤其是在缓存性能计算结果的情况下。这是一个严格的实现细节,不应引起调用方的关注,因此删除 康斯特 指定相当于抽象中的一个小泄漏。

    对于锁,我会问自己锁是否只是一个私有实现细节。如果锁与其他对象共享,那么它实际上是接口的一部分。

    在某些平台上,锁是通过句柄访问的,因此您可以使用 康斯特 不用担心的方法 易变的 .