这是关于 C++11 标准中死锁的探索。
在C++ Concurrency in Action的sec3.2.4中有一个防止多线程死锁的例子。此外,对于没有这本书的人,还有一个几乎相似的例子可以参考: http ://en.cppreference.com/w/cpp/thread/lock_tag
我遇到的问题是这两个代码的代码在Visual Studio 2012中出现编译器错误。错误消息是:
'std::mutex::mutex': cannot access private member declared in class 'std::mutex'
这个问题也发生在以下比 cppreference.com 更简单的代码中:
struct bank_account {
std::mutex m;
};
void transfer(bank_account &from, bank_account &to)
{
std::lock(from.m, to.m);
}
int _tmain(int argc, _TCHAR* argv[])
{
bank_account my_account;
bank_account your_account;
std::thread t1(transfer, my_account, your_account); // compiler-error!
std::system("pause");
return 0;
}
在 Visual Studio 2012 中解决这个问题的任何想法?