可变关键字和线程安全

时间:2011-01-20 20:00:00

标签: c++ oop thread-safety volatile mutable

我有一个抽象基类

class Map {
  public:
    virtual Value get(Key const &) const;
};

来自外部库的数据库类

class Database {
  public:
    // logically const and thread-safe
    Value get(Key const &key);
};

我开始使用像

这样的实现
class PersistentMap : public Map {
    Database db;

  public:
    Value get(Key const &key) const
    { return const_cast<Database &>(db).get(key); }
};

随着const_cast的数量增长超出界限,我通过向mutable添加PersistentMap::db说明符(以及提醒自己丑陋的评论)来摆脱它们。 / p>

  1. 我第一次使用const_cast线程安全吗?
  2. 我的新方法是线程安全的,还是db也应该标记为volatile

1 个答案:

答案 0 :(得分:1)

这完全取决于Database :: get是否是线程安全的。如果它包含阻止并发访问的锁,或者对于并发访问是安全的,那么你的代码可以使用const_cast或mutable。使用volatile是完全不相关的。