【发布时间】:2018-03-09 10:44:19
【问题描述】:
请考虑这种经典方法,我已对其进行了简化以突出确切的问题:
#include <iostream>
#include <mutex>
using namespace std;
class Test
{
public:
void modify()
{
std::lock_guard<std::mutex> guard(m_);
// modify data
}
private:
/// some private data
std::mutex m_;
};
这是使用std::mutex 避免数据竞争的经典方法。
问题是我们为什么要在课堂上保留一个额外的std::mutex?为什么不能每次都像这样在std::lock_guard的声明前声明呢?
void modify()
{
std::mutex m_;
std::lock_guard<std::mutex> guard(m_);
// modify data
}
【问题讨论】:
-
就像每个人都自带锁一样,他们在进入你家时会锁定/解锁
-
只回答一个简单的问题:互斥体的目的是什么?完成此操作后,您也有了问题的答案。
-
不是很明显!
标签: c++ multithreading c++11 mutex race-condition