Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;std::lock和std::unique_lock之间有什么区别?_C++_Multithreading_C++11_Locking - Fatal编程技术网

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

C++ C++;std::lock和std::unique_lock之间有什么区别?,c++,multithreading,c++11,locking,C++,Multithreading,C++11,Locking,我遇到一种情况,需要在两个处理线程之间锁定一个资源(一个std::queue) 第一个线程需要将数据推送到std::queue,而第二个线程将从队列中弹出数据并对其进行处理 我需要确保两个线程不会竞争我的std::queue 这是我第一次使用C++锁,我进入了不同的方法: STD::锁和 STD::UNIQUIGYOLD ,但是我不知道该选择哪一个……/P> std::lock和std::unique\u lock之间有什么区别,以及它们应该如何使用 感谢您的帮助。std::lock是一种算法,

我遇到一种情况,需要在两个处理线程之间锁定一个资源(一个
std::queue

第一个线程需要
数据推送到
std::queue
,而第二个线程将
从队列中弹出
数据并对其进行处理

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

这是我第一次使用C++锁,我进入了不同的方法:<代码> STD::锁和 STD::UNIQUIGYOLD ,但是我不知道该选择哪一个……/P>

std::lock
std::unique\u lock
之间有什么区别,以及它们应该如何使用


感谢您的帮助。

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

std::unique_-lock
是一个类模板,它包装了一个互斥锁,可以用作作用域锁防护,类似于
std::lock_-guard
,但比后者更强大(它本身是可锁定的,可以提前解锁,并且可以移动)


您可能不想要这两个,但只需使用好的旧
std::lock\u-guard
std::lock
是一种以特定方式一次性锁定可锁定对象集合的算法,可避免死锁

std::unique_-lock
是一个类模板,它包装了一个互斥锁,可以用作作用域锁防护,类似于
std::lock_-guard
,但比后者更强大(它本身是可锁定的,可以提前解锁,并且可以移动)


您可能不想要这两个,但只需使用好的旧
std::lock\u-guard

std::lock
通常与一组由
std::defer\u-lock
构造的
唯一锁一起使用,
std::lock
通常与一组由
std::defer\u lock
构造的
unique\u lock
一起使用。