文章目录
一、死锁
4.在go语言中,不要将互斥锁、读写锁与channel混用,会导致死锁。————隐形死锁
二、互斥锁
channel同步数据
互斥锁同步数据
三、读写锁
一把锁有两个属性读和写。读操作与写操作分开
读共享,写独占。写锁优先级比读锁高(在读go程与写go程同时竞争cpu时,优先给写锁使用)
二、隐形死锁解决方法
四、条件变量
本身不是锁,经常搭配锁使用
原子操作:两个部分为cpu时间轮片中的不可再分的不能分为两步执行,最小的执行单位,在执行a后不会丢失cpu使用权限会继续使用cpu完成步骤b
步骤:
当数据存满有缓存的channel后,写端抢到cpu写锁再次往channel中写数据时,调用wait()函数,满足阻塞状态,将写锁解锁。这时候,读锁就可以拿到锁进行读出channel内容,channel就可以进行写入了,然后唤醒signal()之前的写锁并给写锁枷锁。