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

go语言--锁

锁的基础,go的锁是构建在原子操作和信号锁之上的

原子锁

原子包实现协程的对同一个数据的操作,可以实现原子操作,只能用于简单变量的简单操作,可以把多个操作变成一个操作

sema锁

也叫信号量锁/信号锁
核心是一个uint32值,含义是同时可并发的数量
每一个sema 锁都对应一个SemaRoot结构体

SemaRoot中有一个平衡二又树用于协程排队

获取锁: uint32减一,获取成功
释放锁: uint32加一,释放成功
 

treap  指针指向sudog

如果uint32为0 获取锁: 协程gopark休眠,进入堆树等待

释放锁: 从堆树中取出一个协程,唤醒
sema锁退化成一个专用休眠队列

sema经常被用作休眠队列

http://www.lryc.cn/news/154203.html

相关文章:

  • 再见,CSDN
  • MySQL总复习
  • 桌面平台层安全随手记录
  • 【Docker】 08-Dockerfile
  • 【二等奖方案】大规模金融图数据中异常风险行为模式挖掘赛题「Aries」解题思路
  • Github 下载指定文件夹(git sparse-checkout)
  • 蚂蚁集团SQLess 开源,与内部版有何区别?
  • An Efficient Memory-Augmented Transformer for Knowledge-Intensive NLP Tasks
  • Java项目中jar war pom包的区别
  • 整理mongodb文档:分页
  • 社区团购新玩法,生鲜蔬菜配货发货小程序商城
  • shell bash中设置命令set
  • 机器学习---预剪枝、后剪枝(REP、CCP、PEP、)
  • Python 爬虫—scrapy
  • ABB机器人20032转数计数器未更新故障报警处理方法
  • C# 记事本应用程序
  • 模型训练:优化人工智能和机器学习,完善DevOps工具的使用
  • WorldCoin 运营数据,业务安全分析
  • Java之Calender类的详细解析
  • uniapp 微信小程序 锚点跳转
  • 主成分分析笔记
  • android studio 的 adb配置
  • 【HTML5高级第一篇】Web存储 - cookie、localStorage、sessionStorage
  • Flink---1、概述、快速上手
  • QT实现TCP通信(服务器与客户端搭建)
  • 云备份项目
  • 基础算法(一)
  • Consider defining a bean of type问题解决
  • Android 1.2.1 使用Eclipse + ADT + SDK开发Android APP
  • Llama-7b-hf和vicuna-7b-delta-v0合并成vicuna-7b-v0