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