GO语言Metex

Mutex互斥锁

Go 复制代码
type Mutex struct{
    state int32 // 0表示未加锁 1表示加锁,原子操作
    sema uint32 // 信号量,用作等待队列
}

Mutex正常模式:

尝试加锁的G会先自旋几次,若获不到锁,则加入等待队列. 正常模式下,自选和等待队列的一起竞争

因为G频繁的挂起和唤醒会导致开销,为了高吞吐

Mutex饥饿模式:

直接加入等待队列FIFO

防止尾端延迟


前面其他位表示多少个等待者

在正常模式下

自旋的条件,当单核下自旋没意义,或者只有一个P时自旋也没意义.

在多核下,,且至少有一个其他的P在running,且当前P的本地队列为空才可以自旋转.

相关推荐
爱学习的阿磊3 分钟前
自定义操作符重载指南
开发语言·c++·算法
fenglllle10 分钟前
使用fyne做一个桌面ipv4网段计算程序
开发语言·go
上海合宙LuatOS23 分钟前
LuatOS框架的使用(2)
java·服务器·开发语言·前端·数据库·嵌入式硬件·php
一起养小猫24 分钟前
Flutter for OpenHarmony 实战 文件存储与数据库操作完全指南
开发语言·jvm·数据库·spring·flutter·harmonyos
云游云记27 分钟前
php Composer 使用全攻略
开发语言·php·composer
码农水水33 分钟前
SpringBoot配置优化:Tomcat+数据库+缓存+日志全场景教程
java·数据库·spring boot·后端·算法·tomcat·哈希算法
独自破碎E36 分钟前
LCR004-只出现一次的数字II
java·开发语言
剑锋所指,所向披靡!38 分钟前
STL之sting容器
开发语言·c++
Henry Zhu12340 分钟前
Qt Model/View架构详解(六):综合实战项目(下)
开发语言·qt·架构
Liuqz20091 小时前
Go 安装与配置
开发语言·后端·golang