C++17 scoped_lock与死锁预防
请说明std::scoped_lock(C++17)的设计目的及其与lock_guard的比较。
回答
孤独的心
std::scoped_lock是C++17引入的RAII锁,支持同时锁定多个互斥量,内部使用std::lock()避免死锁。
std::mutex m1, m2;
{
std::scoped_lock lock(m1, m2); // 同时锁定,死锁安全
// 共享数据操作
}
与lock_guard区别:
lock_guard只支持单个互斥量scoped_lock支持可变参数,可锁定多个互斥量scoped_lock是完全替代lock_guard的升级版
推荐在需要锁定多个互斥量时始终使用scoped_lock。