C++ std::lock 和 std::unique_lock 有什么区别?

C++ What are the differences between std::lock and std::unique_lock?

我遇到了需要锁定两个处理线程之间的资源 (std::queue) 的情况。

第一个线程需要 push 数据到 std::queue,而第二个线程要 pop 从队列中取出数据并进行处理。

我需要确保两个线程不会竞争我的 std::queue

因为这是我第一次使用 C++ 锁,所以我采用了不同的方法:std::lockstd::unique_lock,但我不知道该选择哪个...

std::lockstd::unique_lock 有什么区别,应该如何使用。

感谢您的帮助。

std::lock 是一种 算法 ,它以避免死锁的特定方式一次性锁定 可锁定对象的集合 .

std::unique_lock是一个class模板,包裹了一个互斥量,可以作为作用域锁守卫,类似于std::lock_guard,但比后者更强大(它本身可上锁,可提早解锁,可四处移动)。

你可能不想要这些,而是​​使用旧的 std::lock_guard