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

36、Linux内核中的同步原语:信号量与互斥锁详解

Linux内核中的同步原语:信号量与互斥锁详解

1. 信号量简介

在Linux内核中,信号量是另一种支持线程或进程同步的机制。此前我们了解过自旋锁,它主要用于短时间的加锁场景,在加锁期间不允许进程或线程睡眠,并且为避免死锁会禁用抢占,不允许进行上下文切换。

而信号量则适用于需要长时间持有锁的情况,不过对于短时间加锁,它并非最优选择。信号量基于一个变量,该变量可以进行递增或递减操作,其状态代表了获取锁的能力,并且该变量的值不限于0和1。信号量主要分为以下两种类型:
- 二进制信号量:其值只能为1或0。
- 普通信号量:值为任意非负整数。当值大于1时,被称为计数信号量,它允许一个以上的进程获取锁,这有助于记录可用资源,而自旋锁一次只能对一个任务加锁。此外,信号量允许进程睡眠,当一个进程等待另一个进程持有的锁时,调度器可以切换到其他进程。

2. 信号量API
2.1 信号量结构体

在Linux内核中,信号量机制由以下结构体表示:

struct semaphore { raw_spinlock_t lock; unsigned int count; struct list_head wait_list; };

该结构体包含三个字段:
-lock:用于保护信号量数据的自旋锁。
-count:可用资源的数量。
-wait_list

http://www.rkmt.cn/news/89871.html

相关文章:

  • 37、Linux内核中的读写信号量:原理与实现解析
  • 10、BPF 工具使用指南与技巧
  • 38、Linux内核中的同步原语与内存管理
  • 阶跃星辰双模型开源引爆AI圈:300亿参数视频生成+实时语音对话重构多模态技术边界
  • 11、探索 BPF 实用工具:从 BPFTool 到 eBPF Exporter
  • 2025-12-13:十六进制和三十六进制转化。用go语言,给定一个整数 n,先求它的平方并把该值用大写字母的 16 进制表示(符号位按需处理,数位使用 0–9 与 A–F),再求它的立方并将该值用大
  • 39、Linux内核内存管理:固定映射地址与ioremap解析
  • 重磅发布:Qwen3-VL-8B-Instruct-FP8模型震撼登场,开启多模态AI应用新纪元
  • ollama v0.13.3 最新发布:新增模型与功能优化详细解读
  • 38、互联网邮件安全与Web服务器安全综合指南
  • 百度开源再放大招:ERNIE-4.5-VL-28B-A3B-Thinking颠覆多模态AI认知边界
  • 43、保障Web与文件服务安全:技术、挑战与应对策略
  • C++--哈希封装my_unordered_set和my_unordered_map
  • 一个卷积后就做池化还是多个卷积后做池化?
  • 智谱AI开源GLM-4-9B-Chat-1M:突破200万中文字符上下文壁垒,多模态能力引领行业新标杆
  • NCMconverter:解锁网易云音乐格式限制的终极解决方案
  • 知网AIGC检测原理是什么?知网AI率检测严格吗?
  • 论文降重与AIGC痕迹消除:当学术写作遇见宏智树AI学术
  • 液态智核V2震撼发布:重新定义边缘设备生成式AI体验
  • 斯坦福新框架AgentFlow突破AI决策瓶颈:模块化设计与Flow-GRPO训练法引领智能代理新范式
  • Kakao开源轻量级多模态模型Kanana-V:重新定义小参数视觉语言模型性能边界
  • Qwen3-235B-A22B-Instruct-2507震撼登场:256K超长上下文开启AI全场景应用新纪元
  • DeepSeek-Coder-V2-Instruct-0724强势登榜Aider LLM排行第二,技术突破引领代码大模型新高度
  • 18、Linux系统文件共享与安全防护指南
  • 21、Linux系统高级管理技巧全解析
  • 22、高级系统管理与故障排除技巧
  • Cesium快速入门16:Primitive多个实体与颜色修改
  • C语言实现堆排序(附带源码)
  • 后台任务与WebSocket实时应用
  • SQL分析函数`ROW_NUMBER`的兼容性与深度解析