一个getter函数需要一个互斥体?

前端之家收集整理的这篇文章主要介绍了一个getter函数需要一个互斥体?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个从多个线程访问的类. getter和setter函数都用lock来保护.是否需要吸附器功能的锁?为什么?
class foo {
public:
    void setCount (int count) {
        boost::lock_guard<boost::mutex> lg(mutex_);
        count_ = count;
    }

    int count () {
        boost::lock_guard<boost::mutex> lg(mutex_); // mutex needed?
        return count_;
    }

private:
    boost::mutex mutex_;
    int count_;
};

解决方法

您可以绕过锁的唯一方法是,如果您可以说服自己,系统将在所有情况下原子传递守卫的变量.如果由于某种原因您无法确定,那么您需要互斥体.

对于类似int的简单类型,您可能可以说服自己,这取决于体系结构,并假定它适用于单指令传输.对于任何比这更复杂的类型,你将必须拥有锁.

猜你在找的C&C++相关文章