网站大量收购独家精品文档,联系QQ:2885784924

操作系统第7章线程同步.ppt

  1. 1、本文档共33页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
操作系统第7章线程同步

多道程序并发执行的问题 例1:假设某飞机定票系统在t0时刻有A、B 两个终端程序同时都要对机票库中的某航班进行订票。执行如下操作: 在机票数据库中取出当前剩余票数X; 判断 X0(有票吗)? 如果有, X≥N(票够吗)? 如果够,则出票(打印票据); X = X-N(修改剩余票数); 将 X 写回到数据库中; ( X为该航班的当前剩余票数 N为终端程序的定票需求数) 喂金鱼的例子 左怡: If(noFeed){ feed fish } 如何解决这些问题? 锁 睡觉与叫醒 信号量 管程 概念 进程/线程间的关系 同步 互斥 7.3 锁 对前面问题可以通过加锁的办法解决: 飞机订票程序执行时将对剩余票数操作的那段程序锁住,限制只能一个进程执行。 要喂鱼时将放鱼缸的房间锁上,则两人不会同时进去喂鱼,则鱼不会胀死也不会饿死; 锁的基本操作 锁有两个基本操作:闭锁和开锁。 闭锁lock:将锁锁上,其他人/进程进不来。两步: 等待锁打开; 获得锁并锁上。 这两步执行时不能被打断,应该作为一个整体执行——原子操作 开锁unlock:开锁后别人/进程可以进去; 设定一个变量——锁 x = 1 锁开着 x = 0 锁关着 加锁: lock( ) { while(x==0); x=0; } 开锁:unlock( ) { x=1; } 7.4 生产者与消费者问题 生产者生产的产品由消费者消费,生产者把生产的产品放到商店的货架上,只要货架没满,生产者就可以生产,只要货架上有商品消费者就可以消费。 若是货架上满,则生产者可以: 1.在旁边等 2.回去睡觉 若是货架空,则消费者可以: 1.在旁边等 2.回去睡觉 7.5 信号量 信号量是所有原语中功能最强的,不仅是同步原语,通信原语,还可以当作锁使用。 信号量实际是一个计数器,支持两个操作:加法操作Up(V操作)和减法操作Down(P操作)。 信号量的使用 当信号量的取值限制为0和1两种情况时,信号量变为一个锁,Down是获得锁,Up是开锁。可以实现互斥。 其他时候可以用来实现同步/资源管理。 针对每一类资源设一个信号量,一个信号量代表一类资源,他的初值设定为这类资源的个数, Down操作代表申请一资源, Up操作代表归还(释放)一资源。 信号量用于生产者-消费者问题 消费者需要的资源是产品,设定信号量full=0; 生产者需要的资源是空缓冲区数,设定信号量及初值empty=N(缓冲区大小); 多个消费者和生产者不能同时对缓冲区操作,需要设定一个互斥信号量mutex=1; 本章小结 互斥 同步 临界资源 临界区 锁 信号量 * 第7章 线程同步 若两个订票程序交叉执行,结果将不正确。 例2:假定两个线程A和B,分别执行指令x=1和x=2,即: 线程A: x=1; 线程B: x=2; 两个线程执行结束后,x的值是什么? x最终的值依赖于两个线程的执行顺序,而线程的相对执行顺序是不确定的,那么x的值也是不确定的,x=1,x=2都可能,在某些系统可能 x=3 尤尔: If(noFeed){ feed fish } 执行序列表: 左怡 尤尔 观察鱼(没有喂) 观察鱼(没有喂) 喂鱼 喂鱼 鱼胀死了! 为完成某个任务,并发进程/线程在一些关键点可能些需要相互等待与互通消息, 这种关系称为同步。 同步进程间是一种合作关系 门诊医生: …… 开化验单; …… 等化验结果; …… 继续诊病; 化验员: …… 等化验单; …… 化验; 填写化验结果; …… 例如:病人就诊 进程/线程同步 进程/线程互斥 并发进程/线程中的一个或多个进程/线程,因共享某一公有资源(硬件资源或变量)而导致它们不能同时执行。 这是因为资源共享所引起的制约关系。 假定:有一单道公路桥,每次只允许一辆汽车通过,当汽车到达桥头时若桥上无车,便可上桥;否则须等待,直到桥上汽车下桥。 临界资源 每次只能被一个进程使用的资源(软/硬件)。如飞机订票系统中的当前剩余票数X。 临界区 对临界资源进行操作的程序段; 或不能交叉执行的一段程序。 在机票数据库中取出当前剩余票数X; 判断 X0(有票吗)? 如果有, X≥N(票够吗)? 如果够,则出票(打印票据); X

文档评论(0)

qwd513620855 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档