当前位置: 首页 > news >正文

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.dtcms.com/a/111339.html

    相关文章:

  1. 机器视觉工程师的专业精度决定职业高度,而专注密度决定成长速度。低质量的合群,不如高质量独处
  2. linux 命令 awk
  3. 洛谷题单3-P1217 [USACO1.5] 回文质数 Prime Palindromes-python-流程图重构
  4. eBay新规倒计时:您的店铺配送方案即将被系统默认修改
  5. python如何快速删除文件夹中的大量文件
  6. 内网(域)渗透测试流程和模拟测试day--5--Windows和Linux的提权
  7. 通信数据记录仪-产品概念ID
  8. IntelliJ IDEA 2020~2024 创建SpringBoot项目编辑报错: 程序包org.springframework.boot不存在
  9. 人工智能时代人才培养的变革路径:模式创新、能力重塑与认证赋能
  10. Hello Robot创新突破!Stretch3机器人搭载RUMs模型实现未知环境中“即插即用”
  11. 【AI模型核心流程】(一)大语言模型输入处理机制详解与常见误解辨析
  12. leetcode75.颜色分类
  13. 对备忘录模式的理解
  14. vulkanscenegraph显示倾斜模型(5.6)-vsg::RenderGraph的创建
  15. Python 助力人工智能与机器学习的深度融合
  16. Linux如何设置bash为默认shell
  17. AIGC9——​AIGC时代的用户体验革命:智能交互与隐私保护的平衡术
  18. Linux线程同步与互斥:【线程互斥】【线程同步】【线程池】
  19. JavaScript BOM、事件循环
  20. 解锁 C 语言安全新姿势:C11 安全函数全解析
  21. 合肥SMT贴片制造工艺全解析
  22. React编程高级主题:背压(Backpressure)处理
  23. 谢志辉和他的《韵之队诗集》:探寻生活与梦想交织的诗意世界
  24. 6.0 使用Qt+ OpenCV+Python加载图片
  25. 【Android】界面布局-线性布局-例子
  26. 【Cursor】设置语言
  27. css炫酷的3D水波纹文字效果实现详解
  28. 数字化三维实训室:无穿戴动作捕捉技术如何赋能体育与舞蹈
  29. 木马学习记录
  30. 影响RTOS实时性的因素有哪些?