lock_guard和unique_lock

lock_guard和unique_lock互斥锁

std::mutex是c++基础的互斥锁

为了避免有些场景下忘记unlock导致的死锁,c++11引入了std::unique_lock和std::lock_guard两种数据结构。实现自动unlock的功能。

lock_guard

lock_guard在构造时加锁,析构时解锁

std::mutex mut;

{
    std::lock_guard<std::mutex> lck(mut);  //加锁
    handler_data();
    //离开代码块,lck析构时解锁
}

unique_lock

unique_lock和lock_guard都可以实现自动加锁和解锁功能。但unique_lock可以更灵活的管理mutex。

unique_lock提供了unlock、lock\try_lock接口,可以在需要的地方手动解锁

unique_lock可以在初始化构造时选择是否加锁

class tmpa{

private:
    std::mutex mut;
    std::vector<int> fram;

public:
    void insert_data(int dat){
        std::unique_lock<std::mutex> lck(mut, std::defer_lock);  
        //创建一个默认不加锁的unique_lock

        lck.lock();   //手动加锁
        fram.push_back(dat);
        lck.unlock(); //手动解锁

        std::cout << "123456" << std::endl;

        lck.lock();  //手动加锁
        fram.push_back(dat);
        //lck析构时,会判断是否需要解锁,需要就执行unlock
    }

    int pop_data(){
        std::unique_lock<std::mutex> lck(mut);  //构造时加锁
        int res = fram.front();
        fram.pop_back();
        return res;
        //lck析构时解锁
    }
};  }

原文链接: https://www.cnblogs.com/TaXueWuYun/p/17018202.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    lock_guard和unique_lock

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/308922

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月16日 上午10:35
下一篇 2023年2月16日 上午10:39

相关推荐