news 2026/6/7 22:02:15

*进程互斥**:指多个并发执行的进程因共享某种系统资源(如临界资源)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
*进程互斥**:指多个并发执行的进程因共享某种系统资源(如临界资源)
  1. 进程互斥与同步的定义

    • 进程互斥:指多个并发执行的进程因共享某种系统资源(如临界资源),必须以排他方式访问该资源,即在任一时刻只能有一个进程进入临界区执行,其他进程必须等待。这是为避免竞争条件、保证数据一致性而设置的机制。
    • 进程同步:指多个相互协作的进程在执行次序上需要协调,通过一定的机制实现进程间的有序推进,例如一个进程需等待另一个进程完成某操作后才能继续执行。同步强调的是进程之间的逻辑依赖关系和时序控制。
  2. 信号量(Semaphore)的概念
    信号量是一种用于解决进程间同步与互斥问题的数据结构,由荷兰科学家Dijkstra提出。它是一个整型变量,包含两个关键属性:

    • 一个整数值(表示可用资源数量或某种状态);
    • 一个等待队列(记录因该信号量而阻塞的进程)。
      根据初始值不同,信号量可分为:
    • 二进制信号量(初始值为0或1):常用于实现互斥(如互斥锁);
    • 计数信号量(可取任意非负整数):用于管理多个相同类型的资源。
  3. P-V 操作(原语)
    P操作(也称wait操作)和V操作(也称signal操作)是对信号量进行的两种原子操作,不可被中断。

    • P(sem):申请使用资源
      P(sem) { sem = sem - 1; if (sem < 0) { 将当前进程插入到sem的等待队列; 阻塞该进程(让出CPU); } }
    • V(sem):释放资源
      V(sem) { sem = sem + 1; if (sem <= 0) { 从sem的等待队列中唤醒一个进程; 被唤醒的进程变为就绪状态; } }

    其中,P操作对应“申请-等待”,V操作对应“释放-通知”。两者结合可实现对临界资源的安全访问以及进程间的协调运行。
    使用信号量实现进程互斥的核心思想是:将临界资源的访问权限通过一个二进制信号量(初始值为1)进行控制,确保同一时刻只有一个进程可以进入临界区

实现步骤:

  1. 定义一个二进制信号量mutex,初始值为 1(表示临界资源空闲)。
  2. 每个进程在进入临界区前执行P(mutex)操作,尝试获得访问权。
  3. 离开临界区时执行V(mutex)操作,释放访问权。
  4. P、V操作必须成对出现,且保证原子性。

示例:基于P-V操作的临界区管理

假设两个进程Process AProcess B共享一个临界资源(如共享变量counter),需互斥访问。

// 全局定义信号量 mutex,初始值为 1semaphore mutex=1;// 进程代码结构(以A为例)voidProcess_A(){while(1){// 非临界区操作do_non_critical_section();// 进入临界区前:P操作P(mutex);/* 临界区开始 */do_critical_section();// 如:counter++, 文件写入等/* 临界区结束 */// 离开临界区后:V操作V(mutex);// 剩余操作do_remaining_section();}}// Process_B 结构相同,使用同一个 mutex 信号量

执行过程说明:

时间操作mutex 值说明
t0Process A 执行 P(mutex)0成功进入临界区
t1Process B 执行 P(mutex)-1资源已被占用,B 被阻塞
t2Process A 执行 V(mutex)0释放资源,唤醒 B
t3Process B 被唤醒继续执行-1 → 实际变为 0 后运行进入临界区

注:当mutex = 1表示资源可用;0表示被占用;负数表示有进程等待。


关键点总结:

  • 互斥信号量初始值必须为 1,表示只有一个资源可供使用。
  • P操作在进入临界区前调用,用于申请资源。
  • V操作在退出临界区后立即调用,防止死锁或饥饿。
  • P、V操作本身必须是原子的,通常由操作系统内核提供支持。

这种方式简单有效,广泛应用于操作系统中对打印机、共享内存、文件等资源的互斥访问控制。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/8 13:09:41

要让 SAP SD 销售订单行项目里的“重量”“毛重”等字段重新可编辑,99% 的情况都不是权限问题,而是系统标准逻辑

要让 SAP SD 销售订单行项目里的“重量”“毛重”等字段重新可编辑&#xff0c;99% 的情况都不是权限问题&#xff0c;而是系统标准逻辑&#xff1a;只要该行已经生成了交货单&#xff08;Delivery&#xff09;&#xff0c;这些属于「装运层」的字段就被自动锁掉&#xff0c;避…

作者头像 李华
网站建设 2026/6/7 20:23:11

k6负载测试实战:从架构解析到企业级应用部署

k6负载测试实战&#xff1a;从架构解析到企业级应用部署 【免费下载链接】k6 A modern load testing tool, using Go and JavaScript - https://k6.io 项目地址: https://gitcode.com/GitHub_Trending/k6/k6 k6作为现代化的性能测试工具&#xff0c;正在重新定义企业级负…

作者头像 李华
网站建设 2026/6/7 19:17:54

django基于Python员工管理系统

&#x1f345; 作者主页&#xff1a;Selina .a &#x1f345; 简介&#xff1a;Java领域优质创作者&#x1f3c6;、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行交流合作。 主要内容&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据…

作者头像 李华
网站建设 2026/6/7 9:57:58

24、高级概念:Debian内核包构建与模块编译指南

高级概念:Debian内核包构建与模块编译指南 在Debian系统管理中,面对特殊需求时,有许多强大的工具可供使用。本文将重点介绍如何使用 make-kpkg 工具构建定制化的内核包、处理内核模块编译,以及相关的高级操作。 1. make-kpkg 工具概述 make-kpkg 是Debian的内核包工…

作者头像 李华
网站建设 2026/6/6 4:49:10

26、Debian系统安装与管理高级概念

Debian系统安装与管理高级概念 1. aptitude与多版本管理 1.1 多版本选择 当系统配置使用多个APT源时,APT可能会获取到同一软件包的多个版本。 apt-get 可通过在软件包名后加等号和版本号来安装特定版本。而 aptitude 的用户界面强大之处在于,它会在软件包详情页底部显…

作者头像 李华
网站建设 2026/6/7 15:59:59

29、Debian 包构建工具与 pbuilder 使用指南

Debian 包构建工具与 pbuilder 使用指南 在 Debian 系统中构建软件包是一项常见的任务,传统上使用 debian/rules 文件(通常是 Perl 或 make 脚本)来完成。不过,还有其他一些替代的构建工具,如 cdbs 和 yada ,它们各自有独特的优势。同时, pbuilder 作为一个个人…

作者头像 李华