614-Golang的go语句、死锁、线程间同步

并发处理

使用go语句
作用是帮我们启动一个新的例程出来

go 函数()

这个函数一旦开始执行,这个例程就启动了,一旦函数结束,这个例程就结束了

下面这种情况是同步的,只有一个主例程。test先执行完,才执行打印bbb
在这里插入图片描述
在这里插入图片描述
我们现在使用go 函数()
test函数启动了一个新的例程,和主例程分开去并行了。
现在是并发执行了(没有严格的谁块谁慢)
在这里插入图片描述
打印的结可能是aaa bbb也有可能是bbb aaa
在这里插入图片描述
aaa哪里去了?在Go语言的程序中,只要主例程结束了,这个程序就自动结束了,不会去管子例程有没有结束

我们现在修改一下代码,让主例程睡眠一下,等待子例程执行完
在这里插入图片描述
在这里插入图片描述
并发——没有严格的顺序
我们再举个例子:
在这里插入图片描述
在这里插入图片描述
每一次的结果都不一样,因为多例程是并行的,没有严格的先后顺序,我们无法预测,是系统分配

go 函数

1.参数允许
2.返回值不允许

不允许有返回值的(因为并发是没有严格的先后顺序的,有可能,fun1还没有完善,赋值就开始了,如果我们一定要接收返回值,需要用到channel)
在这里插入图片描述
在这里插入图片描述
允许有参数
在这里插入图片描述
在这里插入图片描述

线程间的同步

(生产者-消费者问题)
在这里插入图片描述

一个线程读,一个线程处理,要有严格的谁先谁后的顺序
我们通过对线程的阻塞进行线程间的同步(channel)!

死锁(deadlock)(互锁)

在这里插入图片描述
两个线程互相等待其占用的资源

解决方法:
1.重新设计程序逻辑——理论可行,实际不太靠谱
2.死锁检测——重启程序
(Go自带死锁检测,程序就会关闭,然后重启,再运行,死锁的问题就跨过去了)
99%

具体的多线程理论参考我的linux或者C++的博客

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

林林林ZEYU

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值