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

时间:2015-07-02 22:50:21

标签: c++ multithreading c++11 locking

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

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

我需要确保两个帖子都不会竞争我的std::queue

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

std::lockstd::unique_lock之间有什么区别以及如何使用它们。

感谢您的帮助。

1 个答案:

答案 0 :(得分:6)

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

std::unique_lock是一个包装互斥锁的类模板,可以用作范围锁定保护,类似于std::lock_guard,但比后者更强大(它本身可以锁定,可以提前解锁)并可以四处移动。

您可能不需要这些,而只需使用旧的std::lock_guard