我是否应该使用互斥锁保护基本类型的操作,以便在C++中具有线程安全性?

doc*_*doc 3 c++ mutex locking atomic thread-safety

对于相当简单的操作,实现线程安全的最佳方法是什么?

考虑一对功能:

void setVal(int val)
{
    this->_val = val;
}

int getVal() {
     return this->_val;
}
Run Code Online (Sandbox Code Playgroud)

因为即使基本类型的赋值也不保证是原子的,我应该以下列方式修改程序中的每个getter和setter是否是线程安全的?

void setVal(int val)
{
    this->_mutex.lock();
    this->_val = val;
    this->_mutex.unlock();
}

int getVal() {
     this->_mutex.lock();
     int result = this->_val;
     this->_mutex.unlock();
     return result;
}
Run Code Online (Sandbox Code Playgroud)

Jam*_*lis 6

_val在多线程中使用?如果没有,那么不,您不需要同步访问它.

如果它是从多个线程使用的,那么是的,您需要使用互斥锁或使用原子类型来同步访问(如std::atomic<T>在C++ 0x中,尽管其他线程库也有非标准的原子类型).