首页 > 其他分享 >信号量 semaphore的实现 -06

信号量 semaphore的实现 -06

时间:2024-05-05 16:23:04浏览次数:14  
标签:count down 06 函数 信号量 semaphore 进程

1 semaphore的内核结构体

注意:这是信号量,不是信号。在前面学习异步通知时,驱动程序给应用程序发信号。现在我们讲的信号量是一种同步、互斥机制。

信号量的定义及操作函数都在Linux内核文件include\linux\semaphore.h中定义,如下:

 

初始化semaphore之后,就可以使用down函数或其他衍生版本来获取信号量,使用up函数释放信号量。我们只分析down、up函数的实现。

2 down函数的实现

如果semaphore中的count大于0,那么down函数就可以获得信号量;否则就休眠。在读取、修改count时,要使用spinlock来实现互斥。

休眠时,要把当前进程放在semaphore的wait_list链表中,别的进程释放信号量时去wait_list中把进程取出、唤醒。

代码如下:

 

3 up函数的实现

如果有其他进程在等待信号量,则count值无需调整,直接取出第1个等待信号量的进程,把信号量给它,共把它唤醒。

如果没有其他进程在等待信号量,则调整count。

整个过程需要使用spinlock来保护,代码如下:

 

 

标签:count,down,06,函数,信号量,semaphore,进程
From: https://www.cnblogs.com/liusiluandzhangkun/p/18173581

相关文章

  • 06.数组
    1.数组概述数组是相同类型数据的有序集合;数组描述的是相同类型的若干各数据,按照一定的先后次序排列组合而成;其中,每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问它们。2.数组声明创建首先必须声明数组变量,才能在程序中使用数组:dataType[]arrayRefvar;//首......
  • 106. 从中序与后序遍历序列构造二叉树(leetcode)
    https://leetcode.cn/problems/construct-binary-tree-from-inorder-and-postorder-traversal/要点是明白中序和后序如何构造二叉树的,并且需要理清当前递归函数的语义,不要一开始就陷入细节,而是思考整棵树与其左右子树的关系,语义是:即构造当前节点,给当前节点左右子树赋值,明......
  • Ubuntu 20.04.06 修改主机名
    原因修改主机名vi/etc/hostname重启reboot......
  • ORA-04063: Package Body “SYS.DBMS_CUBE_EXP” While Expdp
    1.场景数据库版本:11.2.0.4当执行@?/rdbms/admin/awrextr.sql进行awr性能分析数据导出时,报错:ORA-20115:datapumpexportencounterederror:ORA-39127:unexpectederrorfromcalltoexport_string:=SYS.DBMS_CUBE_EXP.INSTANCE_EXTENDED_INFO_EXP('AW$EXPRESS','SYS',......
  • P10064 [SNOI2024] 公交线路 题解
    弱化版:CF1827EBusRoutes。对于\(n=2\)的情况可以判掉,剩下的情况取一个度数大于一的点作为根。首先发现如果叶子间满足条件,那么整棵树也满足条件。考虑叶子间什么时候满足条件,记点\(x\)通过最多一条路径可以到达的所有点的集合为\(S_x\),则需满足\(\forallx,y\in\mathbf......
  • MLX90640热像仪测温采集 科研实验 非接触测温
    ​1、描述这是一款小巧迷你科研实验测温热成像多功能热像记录仪,模块带一路ALARM报警信号2.8v电平,一路IICSDASCL接口,一路TTL串口TXDRXD接口,自带USB串口芯片,TYPEC直插电脑显示串口,搭配多功能电脑软件,温度数据看得清楚,是家庭、实验室、工业等不可缺少的工具。点击查看详情!点击......
  • 064、石鼓歌
    064、石鼓歌唐●韩愈张生手持石鼓文,劝我试作石鼓歌。少陵无人谪仙死,才薄将奈石鼓何。周纲凌迟四海沸,宣王愤起挥天戈。大开明堂受朝贺,诸侯剑佩鸣相磨。蒐于岐阳骋雄俊,万里禽兽皆遮罗。镌功勒成告万世,凿石作鼓隳嵯峨。从臣才艺咸第一,拣选撰刻留山阿。雨淋日炙野火燎,鬼物守......
  • 063、谒衡岳庙遂宿岳寺题门楼
    063、谒衡岳庙遂宿岳寺题门楼唐●韩愈五岳祭秩皆三公,四方环镇嵩当中。火维地荒足妖怪,天假神柄专其雄。喷云泄雾藏半腹,虽有绝顶谁能穷。我来正逢秋雨节,阴气晦昧无清风。潜心默祷若有应,岂非正直能感通。须臾静扫众峰出,仰见突兀撑青空。紫盖连延接天柱,石廪腾掷堆祝融。森然......
  • 二值信号量和计数信号量
    信号量常用于控制对共享资源的访问和任务同步。其中控制共享资源可以从停车场的例子去理解。比如现在这个停车场最大容量为100。这个100就是共享资源。假如要把车停进去这个停车场,就需要查看当前停车场中的数量。当前的停车数量就是信号量。信号量的增加对应停车场的车开出停车场......
  • 06-混入-自定义插件-插槽-本地存储-vuex组件通信-页面跳转
    混入mixin在Vue中,混入(mixin)是一种可以在多个组件中重复使用的对象。它允许您将组件中的一些选项提取出来,然后在多个组件中进行重复使用。混入可以包含组件中的任何选项,例如数据、计算属性、方法等。使用步骤在src文件夹下新建一个文件夹,比如mixin,然后再这个文件夹下面新建一......