为相当简单的操作实现线程安全的最佳方法是什么?
考虑一对函数:
void setVal(int val)
{
this->_val = val;
}
int getVal() {
return this->_val;
}
因为即使是基本类型的赋值也不能保证是原子的,我是否应该按照以下方式修改程序中的每个 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;
}
最佳答案
你在使用 _val
在多个线程中?如果没有,则不需要,您不需要同步访问它。
如果从多个线程使用它,那么是的,您需要使用互斥锁或使用原子类型(如 C++0x 中的 std::atomic<T>
,尽管其他线程库具有非标准原子类型,如好吧)。
关于c++ - 为了在 C++ 中线程安全,我应该使用互斥锁保护原始类型上的操作吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3618656/