我遇到了需要在两个处理线程之间锁定资源(std::queue
)的情况。
第一个线程需要push
数据到std::queue
,而第二个线程将pop
数据从队列中移出并处理它。
我需要确保两个帖子都不会竞争我的std::queue
。
由于这是我第一次使用C ++锁,我采用了不同的方法:std::lock
和std::unique_lock
,但我不知道选择哪一个......
std::lock
和std::unique_lock
之间有什么区别以及如何使用它们。
感谢您的帮助。
答案 0 :(得分:6)
std::lock
是一个算法,它以一种特定的方式锁定可锁定对象集合,以避免死锁。
std::unique_lock
是一个包装互斥锁的类模板,可以用作范围锁定保护,类似于std::lock_guard
,但比后者更强大(它本身可以锁定,可以提前解锁)并可以四处移动。
您可能不需要这些,而只需使用旧的std::lock_guard
。