c++多线程总结——不断更新中

一、概论

线程包括了同步以及异步,同步和异步之间的区别就在于共享数据的竞争读取。

二、线程同步

创建线程(以及线程开始运行的时候)——>join(指定线程的模式)
代码链接:https://github.com/xinhui1111/leetcode/blob/master/src/test.cpp

线程与锁的总结

多线程的问题主要是解决竞争资源的问题,关键看那些变量是竞争资源,需要进行处理(其实也就是锁)。
一般的多线程就是锁和释放锁的情况。

std::mutex mtx; 
mtk.lock();
需要锁住的竞争资源
mtx.unlock();

但是这种形式就需要记住在何时去释放锁,因为如果一直锁住就影响整个程序的效率,甚至是会导致程序不能运行。

为了完善这种方式,就想到可以利用类的构造与析构函数,在类的生命周期结束了之后就会调用其析构函数,这时候调用锁的释放,就能够自动完成对锁的lock以及unlock。
,所以为了解决这种问题,就提出可以用类封装一个锁mutex

class lock_guard{
    public:
        lock_guard(){
            //新建mutex并加锁_mutex.lock()
        }
        
        ~lock_guard(){
            //释放锁_mutex.unlock()
        }
    
    private mutex _mutex;
};

所以针对这种方式,我们要考虑的就是lock_guard所对应的对象,两种创建方式并不重要,习惯用哪种就用哪种:

  • 都要首先定义互斥量mutex m_mutex;
  1. lock_guard mylockguard(m_mutex, adopt_lock);//adopt_lock:用于使作用域锁定取得锁定互斥的所有权的标记,一个循环周期就会结束
  2. lock_guard mylockguard(m_mutex)
    可以通过一个{}来进行控制变量,也可以通过while以及if中的{},那么互斥量的作用就在这个{}的声明周期里
    在这里插入图片描述
    在这里插入图片描述

三、线程异步

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值