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

郑州企业网站快速优化多少钱石家庄开发网站建设

郑州企业网站快速优化多少钱,石家庄开发网站建设,博客园 wordpress.net,济南微信小程序报备系统为什么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/465041/

相关文章:

  • 佛山网站开发公司有哪些php网站开发职责
  • 网站建设管理规定网站建设的结论和体会
  • 建站公司哪个平台最好郑州手机软件开发公司
  • 聊城建设局网站建设厅八大员
  • 秦皇岛网站制作与网站建设九江企业网站建设
  • 阿里云网站建设 部署与发布答案python基础教程期末题
  • 广州专业网站设计企业wordpress思源字体
  • c 是用来做网站的吗网站支付开发
  • 北京的制作网站的公司好网站开发策划要求
  • 桓台响应式网站建设wordpress积分投稿
  • 网站建设选择数据库wordpress+积分+文章
  • 不同网站的主机和域名大理建设工程信息网
  • 国外网站网页设计中铁十六局门户网
  • 无代码应用搭建平台优化大师官网下载
  • 手机网站的优势wordpress响应速度慢
  • 上海网站建设怎么张家界做网站
  • 如何制作网页网站网页制作与设计是什么
  • 苏州百度seoseo是哪里
  • 案例网站辽宁建设执业信息网站
  • 网站建设优化推广排名仓库管理系统软件
  • 涟水网站开发公司点击查看阿里云网站建设——部署与发布
  • 网站源码 正在建设中怎么做网站代理商
  • 深圳推广系统多少钱北京路口优化
  • 深圳做网站制作专业做网站公司
  • 做企业网站 需要那些功能seo是什么意思呢
  • 沧州英文网站制作短视频制作公司
  • 哪里有html企业网站模板下载石家庄营销型网站建设
  • 咸宁网站制作公司浅谈学校网站建设
  • 杭州设计网站的公司哪家好购物网站的设计
  • 做企业手机网站手机版网站建设开发