CodeWalk

C++17 scoped_lock与死锁预防

作者:孤独的心 · 2026-05-30 12:55

请说明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