这是关于 C++ 标准的问题。我只能访问标准草案,所以如果这与官方标准不同,我深表歉意。另外,如果我误解了它的工作原理,请随时纠正我。
假设我有两个线程,一个写入字符串,一个复制该字符串的内容。我使用std::mutex myMutex;
我知道您通常应该将 RAII 类用于锁来保护对它们的访问,我只是显式地使用了 lock 和 unlock 以使示例更加明确。
// Global variable
std::string message;
std::mutex myMutex;
// Thread one
myMutex.lock();
message = "Hello";
myMutex.unlock();
// Thread two
myMutex.lock();
std::string copy = message;
myMutex.unlock();
我的理解是,为了在线程之间可靠地工作,线程一必须在设置字符串后执行释放操作,而线程二必须在读取字符串之前执行获取操作。
阅读 C++11 的标准草案,我看不到任何说明这样std::mutex
做的内容,尽管很明显它是预期的,否则互斥锁对任何事情都无用。
有人可以将我指向相关部分以查看吗?对于普通读者来说,标准中的措辞通常并不完全清楚:)