Mutex源码解析

news/2024/12/5 3:14:33/

参考文章:窝窝科技 mutex

1. struct mutex

成员描述
atomic_long_t owner这个成员有两个作用:1记录该mutex对象被哪一个task持有(struct task_struct *)。如果等于NULL表示还没有被任何一个任务持有。2、由于task struct地址是L1_CACHE_BYTES对齐的,因此这个成员的有若干的LSB可以被用于标记状态(在ARM64平台上,L1_CACHE_BYTES是64字节,因此LSB 6-bit会用于保存mutex状态信息)。具体的状态包括:MUTEX_FLAG_WAITERS:wait_list非空,即有任务阻塞在该mutex锁上,owner在unlock的时候必须要执行唤醒动作。MUTEX_FLAG_HANDOFF:为了防止mutex等待队列的任务饿死,在唤醒的时候top waiter会设置该flag(由于乐观自旋的task不断的插入,唤醒的top waiter也未必一定会获取到锁)。有了这个设定后,锁的owner 在解锁的时候会将该锁转交给top waiter,而不是唤醒top waiter去竞争锁。MUTEX_FLAG_PICKUP:该flag表示mutex已经万事俱备(即完成了转交),只等待top waiter来持锁。
struct optimistic_spin_queue osq在配置了MUTEX_SPIN_ON_OWNER的时候,mutex支持乐观自旋机制,osq成员就是乐观自旋需要持有的MCS锁队列。数据结构optimistic_spin_queue只有一个tail的成员,如果等于0,那么说明是一个空队列,没有乐观自旋的任务。否则tail指向一个节点是optimistic_spin_node对象队列的尾部(tail并不是一个指针,它是一个cpu number,optimistic_spin_node对象是per-cpu的,有了cpu number就可以定位到其optimistic_spin_node对象)。
spinlock_t wait_lock用于保护等待链表wait_list操作的自旋锁
struct list_head wait_listMutex是睡眠锁,当无法获取锁并且不具备乐观自旋条件的时候需要挂入这个等待队列,等待锁的owner释放锁。
void *magic和debug相关的成员
Struct lockdep_map dep_map和debug相关的成员

http://www.ppmy.cn/news/371394.html

相关文章

ChatGPT时代,程序猿的机遇与挑战

新时代的来临 腾讯马化腾预言,ChatGPT的发布,代表一个新时代的来临。正如电的发现,因特网的出现,带来了人类翻天覆地的变革,ChatGPT将给人类带来的变革,可能远远超出我们的想象,这次巨变…

[CKA]考试之备份还原 etcd

由于最新的CKA考试改版,不允许存储书签,本博客致力怎么一步步从官网把答案找到,如何修改把题做对,下面开始我们的 CKA之旅 题目为: Task 首先,为运行在https://127.0.0.1:2379上的现有 etcd 实例创建快照…

Spark大数据处理学习笔记1.5 掌握Scala内建控制结构

文章目录 一、学习目标二、条件表达式(一)语法格式(二)执行情况(三)案例演示任务1、根据输入值的不同进行判断任务2、编写Scala程序,判断奇偶性 三、块表达式(一)语法格式…

Vue3中使用Echarts图表

目录 Echarts简介Echarts提供的图表类型及其适用场景安装和使用Echarts安装Echarts引入并使用Echarts自定义图表将数据传递给Echarts处理Echarts库中的事件Echarts简介 Echarts是一个基于JavaScript的开源可视化图表库,由百度开发和维护。它提供了多种类型的图表,包括折线图…

KUGKU

滑稽 我们会看到这样一个界面他的一直在有 然后按F12将会看到flag

《酷玩》——畅玩游戏,尽享应用,探索无限可能!

近年来,随着智能手机的广泛普及,移动应用程序也成为人们生活中必不可少的一部分。酷玩是一款集成了游戏辅助工具和应用程序下载服务的应用程序,同时也拥有社区功能,让用户可以分享各种实用软件、玩机技巧和游戏心得等。 酷玩的设…

酷酷酷酷酷酷酷酷

学习目标: 提示:这里可以添加学习目标 例如: 一周掌握 Java 入门知识 学习内容: 提示:这里可以添加要学的内容 例如: 搭建 Java 开发环境掌握 Java 基本语法掌握条件语句掌握循环语句 学习时间&#…