操作系统 信号量 管程

本文介绍了操作系统中的两种同步机制——信号量和管程。信号量分为二进制和资源信号量,用于控制临界区的互斥访问和线程间的条件同步。管程则是实现多线程互斥访问共享资源的机制,包含锁和条件变量,允许线程在等待特定条件时放弃互斥。通过信号量和管程,可以有效解决生产者-消费者问题,实现高效资源管理。
摘要由CSDN通过智能技术生成

一 信号量

信号量是操作系统提供的一种协调共享资源访问的方法,用信号量表示系统资源的数量.
信号量是一种抽象数据类型,由一个整形(sem)变量和两个原子操作组成

  • P() ,sem减1,如sem<0,进入等待,否则继续
  • V(),sem加1,如果sem<=0,唤醒一个等待进程

信号量是被保护的整数变量,初始化完成后,只能通过P(),V()操作修改,由操作系统保证,PV操作是原子操作.

p()可能阻塞,V()不会阻塞

在这里插入图片描述
信号量分类

  • 二进制信号量:资源数目为0或者1

  • 资源信号量:资源数目为任意非负值


  • 信号量的使用
    互斥访问:临界区的互斥访问控制
    条件同步:线程间的事件等待

生产者-消费者问题
问题分析:

  • 任何时刻只能有一个线程操作缓冲区(互斥访问)
  • 缓存区为空时,消费者必须等待生产者(条件同步)
  • 缓冲区为满时,生产者必须等待消费者(条件同步)

在这里插入图片描述

二 管程

管程是一种用于多线程互斥访问共享资源的程序结果

  • 采用面向对象方法,简化了线程间的同步控制
  • 任一时刻最多只有一个线程执行管理代码
  • 正在管程中的线程可临时放弃管程的互斥访问,等待事件出现时恢复
    管程的使用
  • 在对象/模块中,收集相关的共享数据
  • 定义访问共享数据的方法

  • 一个锁 (控制管程代码的互斥访问)
  • 0或者多个条件变量(管理共享数据的并发访问)

条件变量是管程内的等待机制
进入管程的线程因资源被占用而进入等待状态
每个条件变量表示一种等待原因,对应一个等待队列


wait()操作
将自己阻塞在等待队列中
唤醒一个等待者或释放管程的互斥访问


Signal()操作
将等待队列中的一个线程唤醒
如果等待队列为空,则等同空操作
在这里插入图片描述
管程解决生产者-消费者问题
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值