首页 > 其他分享 >极客时间--golang并发实战课--Mutex的常见使用错误场景

极客时间--golang并发实战课--Mutex的常见使用错误场景

时间:2023-06-04 13:33:25浏览次数:44  
标签:极客 -- goroutine golang 死锁 Mutex 等待 资源

1.Lock/Unlock 没有成对出现,就意味着会出现死锁的情况,或者是因为 Unlock 一个未加锁的 Mutex 而导致 panic。

2.第二种误用是 Copy 已使用的 Mutex。 Package sync 的同步原语在使用后是不能复制的。原因在于,Mutex 是一个有状态的对象,它的 state 字段记录这个锁的状态。如果你要复制一个已经加锁的 Mutex 给一个新的变量,那么新的刚初始化的变量居然被加锁了,这显然不符合你的期望,因为你期望的是一个零值的 Mutex。关键是在并发环境下,你根本不知道要复制的 Mutex 状态是什么,因为要复制的 Mutex 是由其它 goroutine 并发访问的,状态可能总是在变化。

3.死锁

回顾一下关于死锁的概念:

  两个或两个以上的进程(或线程,goroutine)在执行过程中,因争夺共享资源而处于一种互相等待的状态,如果没有外部干涉,它们都将无法推进下去,此时,我们称系统处于死锁状态或系统产生了死锁。

  破坏以下条件可以解决死锁问题:

  1.互斥:至少一个资源是被排他性独享的,其他线程必须处于等待状态,直到资源被释放。

  2.持有和等待:goroutine 持有一个资源,并且还在请求其它 goroutine 持有的资源,也就是咱们常说的“吃着碗里,看着锅里”的意思。

  3.不可剥夺:资源只能由持有它的 goroutine 来释放。

  4.环路等待:一般来说,存在一组等待进程,P={P1,P2,…,PN},P1 等待 P2 持有的资源,P2 等待 P3 持有的资源,依此类推,最后是 PN 等待 P1 持有的资源,这就形成了一个环路等待的死结。

 

标签:极客,--,goroutine,golang,死锁,Mutex,等待,资源
From: https://www.cnblogs.com/99kol/p/17455577.html

相关文章

  • dubbo源码学习(四)初始化过程细节:解析服务
    今天将真正去看dubbo内部的实现过程,看dubbo的源码前我先把dubbo的用户指南和开发指指南大概的看了一遍,这样再看dubbo源码比较轻松。从用户指南和开发指指南可以找到相应的切入点,今天将介绍的是dubbo的初始化解析bean的过程:解析服务基于dubbo.jar内的META......
  • 构建之法阅读笔记06
    通过学习软件工程这门课程以及阅读《构建之法》,我对BUG的概念有了新的更加正确的认识。我以前认为BUG就是软件的漏洞,故障,在软件进行正常运行时会出现不知名的错误。其实这种想法是不正确的,BUG是不能这样来定义的。软件行业有这样一句著名的笑话:(BUG)这不是缺陷,这是一个功能。所谓的B......
  • 【整套视频】spring / springmvc+mybatis
    Spring常用注解redis视频集合,看完这些别说不会redisday88-js对象.rarday87-项目部署和面试指导10.rarday86-订单流程09.rarday85-购物车和订单提交08.rarday84-单品页查询静态化07.rarday83-用户登录和个人中心06.rarday82-商品审核上架和首页筛选05.rarday81-商品添加04.rarday80-......
  • 【视频】SpringBoot为啥到了不学不行的阶段
    Spring常用注解redis视频集合,看完这些别说不会redis01-SpringBoot视频教程_SpringBoot简介.rar02-SpringBoot视频教程_SpringBoot主要特性.rar03-SpringBoot视频教程_SpringBoot四大核心功能.rar04-SpringBoot视频教程_SpringBoot基础开发环境.rar05-SpringBoot视频教程_SpringBoot......
  • 租房减税30,房东加租300!
    点击上方【JAVA乐园】,选择“置顶公众号”,有内涵有价值的文章第一时间送达!阅读文本大概需要2分钟。    2019年国家减税放大招,对于我们这些租客来说,本来是要放鞭炮的好事的。可一看下面这几张图,又凉凉了。    对于我们这些一线码农,拖家带口本来本想一个月可以减税100......
  • 漫谈发版哪些事,好课程推荐
       生产发布是一件非常严谨的事,如果其中一道工序出了问题就有可能导致发版失败。发版涉及开发、测试、运维等。分工明确才能确保一次发版的成功。开发人员    开发人员不止把程序开发完毕就万事大吉了。开发完毕后需要准备发版的jar包、war包、sql脚步、配置文件及配......
  • EVE-NG 导入Cisco 的bin格式镜像文件
    上一篇文章讲了如何安装EVE-NG 模拟器,本篇讲如何导入镜像文件使用非常好用的MobaXterm 终端控制软件输入管理账户 root 及密码注意,需要由于目录是根、树枝(目录)、树叶(文件名)结构,先定位到根目录,才能进入其他树枝(目录)鼠标移到CiscoIOUKeygen.py    iourc.txt   两......
  • 基于Android 网上商城系统设计与实现
    随着移动通信与Internet的飞速发展及相互融合,GPRS使无线网络高速接入到Internet成为现实,移动用户从而可以享受到Internet提供的服务。这样,移动终端不再仅是通讯网络的终端,还将成为互联网的终端。本文首先给出了系统研究背景,对当前手机操作系统发展做了简单的介绍。Android是基于Li......
  • 《信息技术》出题样例
    一、小组评价环节优点1、小组之间的相互评价,可以体现小组内学生的合作态度、合作方法、参与程度等,真正体现合作学习的优势。2、通过评价,小组作品的优点和缺点被指出来,学生可以认识到自己的优势和不足,从而相互学习,共同进步,在理论和操作技能方面都能有所提高。3、相对来说,学生之......
  • 构建之法阅读笔记05
    “不要一开始就想着找到并拼对所有的拼图块,以为能够打造一个巨大的创新。”   在书中的这句话给我的感触很大,对于这句话我很认同。这句话并不是教导我们目光只看到当前,我们要在有统筹观念的同时,注重脚下的每一步,过于追求结果只会使事不如人愿。一步一步,不急不躁,踏实稳步的走......