当前位置: 首页 > news >正文

网站建设单词网站制作模板下载

网站建设单词,网站制作模板下载,男人最好用的浏览器,自己怎么做直播网站吗为什么golang不需要可重入锁? 在工程中使用锁的原因在于为了保护不变量,也可以用于保护内、外部的不变量。 基于此,Go 在互斥锁设计上会遵守这几个原则。如下: 在调用 mutex.Lock 方法时,要保证这些变量的不变性保持…

为什么golang不需要可重入锁?

在工程中使用锁的原因在于为了保护不变量,也可以用于保护内、外部的不变量。

基于此,Go 在互斥锁设计上会遵守这几个原则。如下:

  • 在调用 mutex.Lock 方法时,要保证这些变量的不变性保持,不会在后续的过程中被破坏。
  • 在调用 mu.Unlock方法时,要保证:
    • 程序不再需要依赖那些不变量。
    • 如果程序在互斥锁加锁期间破坏了它们,则需要确保已经恢复了它们。

以下代码可以看出方法F调用了方法G,两个方法均调用了锁。那么在实际开发工程中就可能存在虽然是同一个goroutine运行,但是在一个方法内很难知道其他方法是否也用了这个锁,用来做什么。那么重入锁在此时便无法保证保护不变量

虽然感觉可以通过IDE找到所有使用地方来进行排查

func F() {mu.Lock()... do some stuff ...G()... do some more stuff ...mu.Unlock()
}func G() {mu.Lock()... do some stuff ...mu.Unlock()
} 

为什么需要可重入锁?

在复杂并发应用中,需要跨多个方法同时持有一个锁。比如说存在两个接口方法A、B,A中调用了B,但是由于这两个方法都可能被其他方法所调用,所以如果没有可重入锁便可能会死锁

比如对于某些面向对象语言,父子类都有同一个带锁方法。还比如递归调用

个人观点

从需要可重入锁的观点来看,我认为应用场景其实并不算广泛。并且golang也不是Java这样的面向对象语言。而其他需要用到的场景,可以通过参数控制是否加锁、或者将递归调用函数提取到新函数中交予新函数加锁、或者采用channel之类的来迂回达成可重入锁的目的。这可能也正是golang的目的——鼓励多使用channel实现目的,以及简单更简单

Ref

  1. https://groups.google.com/g/golang-nuts/c/XqW1qcuZgKg/m/Ui3nQkeLV80J?pli=1
  2. https://www.zhihu.com/question/23284564
http://www.yayakq.cn/news/66023/

相关文章:

  • 国外网站设计理念财务公司的主要业务
  • 网站是否有管理员权限分销平台用户协议
  • 网站推广智选刺盾云下拉西安市今天发生的重大新闻
  • 湛江seo建站百度不收录网站吗
  • 深圳财务小公司网站网站网页的收录数量
  • 大朗做网站公司移动互联网软件开发
  • 设计教育网站东昌府区住房和城乡建设局网站
  • 佛山网站建设网络推广成都网站建设q479185700棒
  • 电商网站开发环境怎么写松山湖网站建设
  • 营销型网站和展示型网站的区别能源科技网站建设
  • 临沂网站优化哪家好pmp
  • 医疗医院网站建设一起做网店官网
  • 购物商城网站建设多少钱竞价推广账户竞价托管费用
  • js 网站简体繁体地方社区网站 备案
  • 商丘网站建设哪家值得信任上海建筑设计院有限公司停工
  • 一级a做爰片免费网站视频WordPress wp-cache
  • 哈尔滨网站制作哪儿好薇seo属于运营还是技术
  • 手机端网站开发流程中国服装网官网
  • 青岛专业建设网站网站上点击图片局部放大如何做
  • 一个门户网站多少钱公司营业执照可以做几个网站
  • 课程网站建设发展趋势wordpress加速之gzip
  • 幼教资源网网站开发策划书无锡企业免费建站
  • 开源网站搭建自己做的网站如何联网
  • 雄安优秀网站建设哪家好北京建设网站公司推荐
  • 5h制作网站门户网站的定义
  • 东莞网站建设网如何部署asp网站
  • 网站运行速度慢的原因如何做网站主题
  • jsp网站架构引擎优化是什么工作
  • 一般在什么网站上做电子请帖网站建设布局样式
  • 网站每年多少钱管理咨询公司信息