c++ - 为什么我不能用 lock_guard 锁定两个互斥锁
问题描述
我知道我应该使用std::scoped_lock
同时锁定两个互斥锁。但我不知道为什么。
我读过这篇文章std::lock_guard 或 std::scoped_lock? . 但我没有找到任何人解释为什么std::lock_guard
版本会出现死锁。
#include <mutex>
#include <thread>
std::mutex mtx1;
std::mutex mtx2;
auto main(int argc, char* argv[]) -> int {
std::mutex mtx1;
std::mutex mtx2;
const auto thread_func = [&] {
std::scoped_lock lock(mtx1, mtx2);
// Why I can't lock like this
// std::lock_guard<std::mutex> lock1(mtx1);
// std::lock_guard<std::mutex> lock2(mtx2);
};
std::thread th1(thread_func);
std::thread th2(thread_func);
th1.join();
th2.join();
return 0;
}
谁可以给我解释一下这个?谢谢你。
解决方案
推荐阅读
- spotify - Spotify SDK 身份验证未登录
- ios - tableView.reloadData() 和 DispatchQueue 无法在不同的视图控制器中重新加载 tableview
- sql - 如何在 SQL 存储过程中生成可读的名称?
- vscode-settings - CodeRunner 不在 VS 上显示 JS 输出
- perl - Perl 脚本删除换行符并将下一行数据移动到上一行
- android - 如何添加在其他应用程序中显示的功能
- javascript - 如何避免 React.js 中的这种无限更新循环?
- python - 如何根据另一个表中的数据过滤一个表
- java - 如何在 Android Studio 中修复我的旧应用程序?
- python - Tkinter 中 Canvas 的 tag_bind 方法