【Go】锁与条件变量


一、死锁

在这里插入图片描述
4.在go语言中,不要将互斥锁、读写锁与channel混用,会导致死锁。————隐形死锁

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、互斥锁

channel同步数据
在这里插入图片描述
互斥锁同步数据
在这里插入图片描述在这里插入图片描述

三、读写锁

一把锁有两个属性读和写。读操作与写操作分开
读共享,写独占。写锁优先级比读锁高(在读go程与写go程同时竞争cpu时,优先给写锁使用)
在这里插入图片描述

二、隐形死锁解决方法

在这里插入图片描述

四、条件变量

在这里插入图片描述

本身不是锁,经常搭配锁使用
在这里插入图片描述
在这里插入图片描述
原子操作:两个部分为cpu时间轮片中的不可再分的不能分为两步执行,最小的执行单位,在执行a后不会丢失cpu使用权限会继续使用cpu完成步骤b

步骤:
当数据存满有缓存的channel后,写端抢到cpu写锁再次往channel中写数据时,调用wait()函数,满足阻塞状态,将写锁解锁。这时候,读锁就可以拿到锁进行读出channel内容,channel就可以进行写入了,然后唤醒signal()之前的写锁并给写锁枷锁。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值