stdthread并发lockGuard
Posted thefist11
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了stdthread并发lockGuard相关的知识,希望对你有一定的参考价值。
1. 使用场景
mutex是不安全的,当一个线程在解锁之前异常退出了,那么其它被阻塞的线程就无法继续下去。
2. lock_guard
相对安全,它是基于作用域的,能够自解锁.
- 当该对象创建时,它会像m.lock()一样获得互斥锁
- 当生命周期结束时,它会自动析构(unlock),不会因为某个线程异常退出而影响其他线程。
int cnt = 20;
std::mutex m;
void t1()
while (cnt > 0)
std::lock_guard<std::mutex> lockGuard(m);
// std::m.lock();
if (cnt > 0)
//sleep(1);
--cnt;
std::cout << "t1 " << cnt << std::endl;
// std::m.unlock();
void t2()
while (cnt > 0)
std::lock_guard<std::mutex> lockGuard(m);
// std::m.lock();
if (cnt > 0)
--cnt;
std::cout << "t2 " << cnt << std::endl;
// std::m.unlock();
int test(void)
std::thread th1(t1);
std::thread th2(t2);
th1.join(); //等待t1退出
th2.join(); //等待t2退出
std::cout << "test" << std::endl;
return 0;
输出结果与mutex一样
以上是关于stdthread并发lockGuard的主要内容,如果未能解决你的问题,请参考以下文章
stdthread并发recursive_mutex 递归锁
c++11的std::thread能用类的成员函数构造一个线程吗?语法怎样?