GO语言Metex

Mutex互斥锁

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

Mutex正常模式:

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

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

Mutex饥饿模式:

直接加入等待队列FIFO

防止尾端延迟


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

在正常模式下

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

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

相关推荐
P***84393 分钟前
SpringBoot详解
java·spring boot·后端
8***a8153 分钟前
springboot项目架构
spring boot·后端·架构
7***53349 分钟前
PHP在微服务中的Phalcon
开发语言·微服务·php
8***v25711 分钟前
SpringBoot + vue 管理系统
vue.js·spring boot·后端
5***262211 分钟前
【SpringBoot】SpringBoot中分页插件(PageHelper)的使用
java·spring boot·后端
R***623116 分钟前
Spring Boot 集成 MyBatis 全面讲解
spring boot·后端·mybatis
周杰伦fans21 分钟前
在C#中,`StringContent` 是 `HttpContent` 的一个派生类
开发语言·数据库·c#
DanB2422 分钟前
Java(多线程)
java·开发语言·python
战南诚23 分钟前
Python函数式编程
开发语言·python
O***p60427 分钟前
Java在分布式中的Archaius
java·开发语言·分布式