linux signal up/down/down_interruptiable\down_uninterruptiable使用

在Linux内核中,down, down_interruptible, down_killable, 和 up 是用于操作信号量(semap hores)的函数,它们用于进程同步和互斥。以下是对这些函数的简要说明。

1,down(&sem):
这个函数用于获取信号量。如果信号量的值大于0,它会减少信号量的计数并立即返回。如果信号量的值为0,调用者会被阻塞,直到信号量变为可用或者直到信号量被释放。


2,down_interruptible(&sem):
类似于down,但是它是可中断的。如果信号量的值为0,并且进程收到一个信号(比如用户按下Ctrl+C),down_interruptible会失败并返回-EINTR,而不是一直阻塞。


3,down_killable(&sem):
这个函数在Linux内核2.6.25之后引入,它类似于down_interruptible,但是它只响应致命信号(比如SIGKILL)。如果进程收到一个致命信号,down_killable会失败并返回-EINTR。

4,down_uninterruptible(&sem):
这个函数实际上并不存在标准的Linux内核API中。通常,down函数本身就是不可中断的,除非在特定的情况下,内核代码可能提供了一个自定义的不可中断版本,但这不是标准做法。

5,up(&sem):
这个函数用于释放信号量,增加信号量的计数。如果其他进程或线程正在等待这个信号量,它们中的一个可能会被唤醒。

代码实现

#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/init.h>
#include <linux/sched.h>
#include <linux/semaphore.h>

static DECLARE_MUTEX(my_semaphore);

static int __init my_module_init(void)
{
    init_MUTEX(&my_semaphore); // 初始化信号量为1
    return 0;
}

static void __exit my_module_exit(void)
{
    up(&my_semaphore); // 释放信号量
}

static int my_function(void)
{
    if (down_interruptible(&my_semaphore)) {
        // 如果信号量获取被中断,处理中断
        return -EINTR;
    }

    // 信号量获取成功,执行临界区代码

     fun_test();

    up(&my_semaphore); // 释放信号量
    return 0;
}

module_init(my_module_init);
module_exit(my_module_exit);

    本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/75701.shtml

    如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

    相关文章

    使用人工智能大模型DeepSeek,如何进行论文润色和去重?

    今天我们学习人工智能&#xff0c;如何协助我们进行论文润色和去重。手把手的学习视频地址请访问https://edu.csdn.net/learn/40402/666422 第一步在腾讯元宝对话框中输入如何协助老师做论文润色&#xff0c;通过提问&#xff0c;我们了解了老师写论文润色的步骤和建议。润色的…

    UE5 Simulation Stage

    首先将Grid2D创建出来&#xff0c;然后设置值&#xff0c;Grid2D类似于在Niagara系统中的RenderTarget2D&#xff0c;可以进行绘制&#xff0c;那么设置大小为512 * 512 开启Niagara粒子中的Simulation Stage 然后开始编写我们的自定义模块 模块很简单&#xff0c;TS就是Textur…

    OpenCV 图形API(6)将一个矩阵(或图像)与一个标量值相加的函数addC()

    操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 addC 函数将给定的标量值加到给定矩阵的每个元素上。该功能可以用矩阵表达式替换&#xff1a; dst src1 c \texttt{dst} \texttt{src1} \te…

    多GPU训练

    写在前面 限于财力不足&#xff0c;本机上只有一个 GPU 可供使用&#xff0c;因此这部分的代码只能够稍作了解&#xff0c;能够使用的 GPU 也只有一个。 多 GPU 的数据并行&#xff1a;有几张卡&#xff0c;对一个小批量数据&#xff0c;有几张卡就分成几块&#xff0c;每个 …

    0基础 | 硬件 | 电源系统 一

    降压电路LDO 几乎所有LDO都是基于此拓扑结构 图 拓扑结构 LDO属于线性电源&#xff0c;通过控制开关管的导通程度实现稳压&#xff0c;输出纹波小&#xff0c;无开关噪声 线性电源&#xff0c;IoutIin&#xff0c;发热功率P电压差△U*电流I&#xff0c;转换效率Vo/Vi LDO不适…

    mysql数据库中getshell的方式总结

    mysql数据库中getshell的方式总结 MySQL版本大于5.0&#xff0c;MySQL 5.0版本以上会创建日志文件,我们通过修改日志文件的全局变量,就可以GetSHELL,下面这篇文章主要给大家介绍了关于mysql数据库中getshell的方式,需要的朋友可以参考下 outfile和dumpfile写shell 利用条件 …

    基于Python的微博数据采集

    摘要 本系统通过逆向工程微博移动端API接口,实现了对热门板块微博内容及用户评论的自动化采集。系统采用Requests+多线程架构,支持递归分页采集和动态请求头模拟,每小时可处理3000+条数据记录。关键技术特征包括:1)基于max_id的评论分页递归算法 2)HTML标签清洗正则表达…

    WiFi加密协议

    目录 1. 认证(Authentication)‌ ‌1.1 开放系统认证(Open System Authentication)‌ 1.2 共享密钥认证(Shared Key Authentication)‌ ‌1.3 802.1X/EAP认证(企业级认证)‌ ‌2. 关联(Association)‌ ‌3. 加密协议(Security Handshake)‌ ‌整体流程总结‌…

    MySQL篇(六)MySQL 分库分表:应对数据增长挑战的有效策略

    MySQL篇&#xff08;六&#xff09;MySQL 分库分表&#xff1a;应对数据增长挑战的有效策略 MySQL篇&#xff08;六&#xff09;MySQL 分库分表&#xff1a;应对数据增长挑战的有效策略一、引言二、为什么需要分库分表2.1 性能瓶颈2.2 存储瓶颈2.3 高并发压力 三、分库分表的方…

    极限编程(XP)简介及其价值观与最佳实践

    目录 一、什么是极限编程&#xff08;XP&#xff09;二、极限编程的核心价值观1. 沟通2. 简单3. 反馈4. 勇气 三、极限编程的12个最佳实践1. 结对编程2. 40小时工作制3. 简单设计4. 代码规范5. 测试驱动开发&#xff08;TDD&#xff09;6. 系统隐喻7. 持续集成8. 重构9. 客户在…

    Java进阶-day06:反射、注解与动态代理深度解析

    目录 一、反射机制&#xff1a;Java的自我认知能力 1.1 认识反射 1.2 获取Class对象 1.3 获取类的成分 二、注解&#xff1a;Java的元数据机制 2.1 注解概述 2.2 元注解 2.3 注解解析 2.4 注解的实际应用 三、动态代理&#xff1a;灵活的间接访问机制 3.1 为什么需要…

    Nacos注册中心AP模式核心源码分析(集群模式)

    文章目录 概述一、客户端新注册实例信息在集群间同步二、服务端集群节点信息在集群间同步2.1、DistroMapper2.2、ProtocolManager2.3、ServerListManager2.4、RaftPeerSet 三、客户端实例状态信息在集群间同步四、服务端新节点上线同步集群数据 概述 在Nacos集群模式下&#xf…

    vscode和cursor对ubuntu22.04的remote ssh和X-Windows的无密码登录

    这里写自定义目录标题 写在前面需求的描述问题的引出 昨天已使能自动登录上午我的改变UBUNTU 22.04关闭密码规则一&#xff1a;修改 /etc/pam.d/common-password 文件二&#xff1a;修改 /etc/security/pwquality.conf 文件方法三&#xff1a;禁用 pam_pwquality.so 模块 vscod…

    论文阅读:基于增强通用深度图像水印的混合篡改定位技术 OmniGuard

    一、论文信息 论文名称:OmniGuard: Hybrid Manipulation Localization via Augmented Versatile Deep Image Watermarking作者团队:北京大学发表会议:CVPR2025论文链接:https://arxiv.org/pdf/2412.01615二、动机与贡献 动机: 随着生成式 AI 的快速发展,其在图像编辑领…

    一周学会Pandas2 Python数据处理与分析-NumPy数组创建

    锋哥原创的Pandas2 Python数据处理与分析 视频教程&#xff1a; 2025版 Pandas2 Python数据处理与分析 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili NumPy数组创建最常用的方式是直接创建&#xff0c; numpy 可以直接创建或者将 python的其他元素转为 array 对象。 下…

    【全球首发】DeepSeek谷歌版1.1.5 - 免费GPT-4级别AI工具

    【全球首发】DeepSeek谷歌版1.1.5 - 免费GPT-4级别AI工具 资源简介 DeepSeek谷歌版1.1.5是目前全球领先的免费AI助手&#xff0c;性能超越国内主流AI产品&#xff0c;提供类似GPT-4的智能体验。 版本信息 最新版本&#xff1a;1.1.5&#xff08;2024最新版&#xff09;应用…

    小程序29-事件穿参-mark 自定义数据

    小程序进行事件传参的时候&#xff0c;除了使用 data-*属性 传递参数外&#xff0c;还可以 使用 mark 标记传递参数 mark 是一种自定义属性&#xff0c;可以在组件上添加&#xff0c;用于来识别具体触发事件的 target 节点。同时 mark 还可以用于承载一些自定义数据 在组件上使…

    高级:分布式系统面试题精讲

    一、引言 分布式系统在现代软件开发中占据重要地位&#xff0c;其设计和实现需要考虑多个关键因素。面试官通过相关问题&#xff0c;考察候选人对分布式系统核心概念的理解、实际应用能力以及在复杂场景下的问题解决能力。本文将深入分析分布式系统的CAP定理、一致性协议、分布…

    【Android Studio 下载 Gradle 失败】

    路虽远行则将至&#xff0c;事虽难做则必成 一、事故现场 下载Gradle下载不下来&#xff0c;没有Gradle就无法把项目编译为Android应用。 二、问题分析 观察发现下载时长三分钟&#xff0c;进度条半天没动&#xff0c;说明这个是国外的东西&#xff0c;被墙住了&#xff0c;需…

    系统思考:思考的快与慢

    在做重大决策之前&#xff0c;什么原因一定要补充碳水化合物&#xff1f;人类的大脑其实有两套运作模式&#xff1a;系统1&#xff1a;自动驾驶模式&#xff0c;依赖直觉&#xff0c;反应快但易出错&#xff1b;系统2&#xff1a;手动驾驶模式&#xff0c;理性严谨&#xff0c;…