go语言中锁与条件变量+操作系统的pv操作

首先我们介绍一下死锁,看看它的定义
死锁 : 不是一种锁,而是一种错误使用锁导致的现象

1.单go程自己死锁
channel应该在至少2个以上的go程中进行通信,否则死锁
2.go程间channel访问顺序导致死锁
使用channel一端读(写),要博阿正另一端写(读),同时有机会执行,否则死锁
3.多go程,多channel交叉导致死锁
A go程,掌握M的同时,尝试拿N;B go程,掌握N的同时尝试拿M
4.在go语言汇总,尽量不要将互斥锁、读写锁与channel混用 ------ 会造成隐形死锁
2,3类型死锁的例子

func main11(){
   
	ch:= make(chan int)



	go func() {
   
		ch<- 789
	}()
	num:= <- ch
	fmt.Println("num = ",num)
}

func main(){
   
	ch1 := make(chan int)
	ch2 := make(chan int)

	go func() {
   
		for  {
   
			select {
   
			case num:=<- ch1:
				ch2 <- num
			}
		}
	}()

	for  {
   
		select {
   
		case num:= <-ch2:
			ch1<-num

		}
		}
	}

互斥锁:
每个资源都对应于一个可称为 “互斥锁” 的标记,这个标记用来保证在任意时刻,只能有一个协程(线程)访问该资源。其它的协程只能等待。

互斥锁是传统并发编程对共享资源进行访问控制的主

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赤狐先生

如果有一点点帮助,可以给点支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值