c++中lock_guard以及unique_lock的区别

2021-07-04  本文已影响0人  crazyhank

这两种锁都可以对std::mutex进行封装,实现RAII的效果。绝大多数情况下这两种锁是可以互相替代的,区别是unique_lock比lock_guard能提供更多的功能特性(但需要付出性能的一些代价),如下:

通过unique_lock锁多个锁:

std::unique_lock<std::mutex> lk1(mutex1, std::defer_lock);
std::unique_lock<std::mutex> lk2(mutex2, std::defer_lock);
std::lock(lk1, lk2);

通过unique_lock与条件变量一起使用:

std::condition_variable cvar;
std::mutex mmutex;
std::unique_lock<std::mutex> lock(mmutex);

等待线程:

cvar.wait(lock, [&, this]() mutable throw() -> bool{ return this->isReady(); });

唤醒线程:

std::lock_guard<std::mutex> guard(mmutex);
flag = true;
std::cout<<"Data is ready"<<std::endl;
cvar.notify_one();

上一篇下一篇

猜你喜欢

热点阅读