[英]Why c++11 std::lock and std::scoped_lock need at least 2 parameters?
刚刚发现这 2 个实用程序至少需要 2 个参数,例如 2 个互斥锁才能锁定。
需要是这样的(来自 cppreference.com):
void assign_lunch_partner(Employee &e1, Employee &e2)
{
static std::mutex io_mutex;
{
std::lock_guard<std::mutex> lk(io_mutex);
std::cout << e1.id << " and " << e2.id << " are waiting for locks" << std::endl;
}
{
std::scoped_lock lock(e1.m, e2.m);
}
}
至少需要 2 个参数有什么意义吗? 设计考虑是什么,想了解更多细节。
非常感谢。
从cppreference 页面中,您从(重点是我的)中获取了示例:
类 scoped_lock 是一个互斥体包装器,它提供了一种方便的 RAII 风格的机制,用于在作用域块的持续时间内拥有一个或多个互斥体。
std::scoped_lock
是用于获取多个互斥锁的便捷实用程序 - 它将在std::scoped_lock
使用死锁避免机制。 在 C++11 和 C++14 中,我们只有std::lock()
,但它不是 RAII 机制(它不会自动解锁互斥锁)。
您还可以将std::scoped_lock
与单个互斥锁一起使用,然后它就等同于std::lock_guard
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.