我有一个从多个线程访问的类. 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的简单类型,您可能可以说服自己,这取决于体系结构,并假定它适用于单指令传输.对于任何比这更复杂的类型,你将必须拥有锁.