day 22线程间通信

一、互斥锁
1、资源:
        资源是有限的,在程序运行过程中,一段代码、一段空间、一个变量、CPU、内存都可以看做资源

2、互斥锁: 是一种资源,当一个线程任务加锁,其余线程任务无法再次加锁,直到解锁后才能加锁,互斥锁主要是用来防止多个线程任务竞争某个资源,加锁和解锁中间的代码称为临界代码也称为临界区。

需要注意:

        互斥锁不能同步,多个任务依然保持异步执行,但是可以解决资源竞争
        原子操作:最小的一次CPU操作,在执行原子操作时不会切换调度任务

二、死锁
1、概念:多线程加锁解锁导致多个任务均无法向下执行的状态称为死锁状态简称为死锁    
2、死锁产生的4个必要条件:
        1.互斥条件:同一把锁不能被多个线程任务同时锁定
        2.不剥夺条件:不剥夺条件是指一个线程任务已经锁定了一个资源,不能被其他线程任务抢占,直到它使用完该资源
        3.请求和保持条件:如果没有拿到锁资源一直申请获得锁资源
        4.循环等待条件:如果没有得到锁资源会一直等待

3、如何避免产生死锁:
        1.加锁顺序保持一致
        2.打破互斥条件、不可剥夺条件(不建议使用)
        3.使用pthread_mutex_trylock替代pthread_mutex_lock

三、信号量
1、作用:实现多线程间同步 

    信号量是一种资源(可以初始化、销毁、申请、释放)
    申请:资源数 > 0     申请操作让资源数-1
          资源数 == 0   申请操作会阻塞,直到资源数不为0,申请得到资源后继续向下执行
    释放:资源数+1 
          释放操作让资源数+1

  • 22
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值