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 递归锁

stdthread创建

stdthread死锁deadlock

c++11的std::thread能用类的成员函数构造一个线程吗?语法怎样?

性能测试中,并发用户数是指的服务端并发么?客户端并发与服务端并发的区别是啥?

并发数并发以及高并发分别是什么意思?