C++ 运算符重载和互斥

C++ 运算符重载和互斥,c++,overloading,mutex,operator-keyword,C++,Overloading,Mutex,Operator Keyword,我想在操作符(=)内创建互斥(boost) 下面的代码是线程安全的 ub_int & operator=(const int x) { mutex::scoped_lock mylock(MX_ub, defer_lock); mylock.lock(); this->v=x; mylock.unlock(); return *this; } 代码似乎是正确的,但是 如注释中所述,不应使用defer_lock参数 至少在本例中,您

我想在操作符(=)内创建互斥(boost) 下面的代码是线程安全的

ub_int & operator=(const int x)
{
    mutex::scoped_lock mylock(MX_ub, defer_lock);
    mylock.lock();
        this->v=x;
    mylock.unlock();
    return *this;
}

代码似乎是正确的,但是

  • 如注释中所述,不应使用defer_lock参数
  • 至少在本例中,您可能根本不需要互斥,因为对int的写入通常是一个原子操作

延迟、锁定、解锁。。。为什么?我在示例中找到了这个解决方案,它很有效。这是错误的?如果删除defer_lock参数,则不必显式锁定和解锁互斥锁。在构造scoed_lock对象时,互斥锁将被锁定,并在operator=函数结束时由scope_lock的析构函数自动解锁。