GO语言Metex

Mutex互斥锁

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

Mutex正常模式:

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

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

Mutex饥饿模式:

直接加入等待队列FIFO

防止尾端延迟


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

在正常模式下

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

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

相关推荐
JaguarJack15 分钟前
PHP 基金会宣布:Streams 现代化 将引入事件循环与异步新能力
后端·php
Mos_x24 分钟前
HeidiSQL导入与导出数据
java·后端
oak隔壁找我37 分钟前
Elasticsearch QueryBuilders 高级使用案例
java·后端
小龙报39 分钟前
《算法通关指南:数据结构和算法篇 --- 顺序表相关算法题》--- 询问学号,寄包柜,合并两个有序数组
c语言·开发语言·数据结构·c++·算法·学习方法·visual studio
Zhang青山41 分钟前
【玩转全栈】----Django基本配置和介绍
java·后端
数据知道44 分钟前
Go语言设计模式:工厂模式详解
开发语言·设计模式·golang·go语言·工厂模式
AI视觉网奇1 小时前
coco json 分类标注工具源代码
开发语言·python
勇敢牛牛_2 小时前
Rust真的适合写业务后端吗?
开发语言·后端·rust
要加油GW2 小时前
python使用vscode 需要配置全局的环境变量。
开发语言·vscode·python
不爱学英文的码字机器2 小时前
深度解析《AI+Java编程入门》:一本为零基础重构的Java学习路径
java·人工智能·后端·重构