操作系统c语言两个进程制约且互斥,江苏师范大学操作系统ppt第2章-2 进程的同步与互斥.ppt...

江苏师范大学操作系统ppt第2章-2 进程的同步与互斥

生产者/消费者问题(描述) 通过一个公用缓冲池可以把一群生产者p1,p2…,pm,和一群消费者Q1,Q2,…,Qn联系起来。如图: 只要缓冲区未满,生产者就可以把产品送入缓冲区; 只要缓冲区未空,消费者就可以从缓冲区中取走物品。 * 生产者/消费者问题(图示) * * 生产者/消费者必须互斥 生产者和消费者可能同时进入缓冲区,甚至可能同时读/写一个存储单元,将导致结果执行不确定。 这显然是不允许的。必须使生产者和消费者互斥进入缓冲区。即,某时刻只允许一个实体(生产者或消费者)访问缓冲区,生产者互斥消费者和其他任何生产者。 * 生产者/消费者必须同步 生产者不能向满缓冲区写数据,消费者也不能在空缓冲区中去数据,即生产者与消费者必须同步 * 生产者/消费者问题(分析) 为解决生产者消费者问题,应该设两个同步信号量,一个说明空缓冲区的数目,用empty表示,初值为缓冲池的大小N,另一个说明已用缓冲区的数目,用full表示,初值为0。 由于在此问题中有i个生产者和j个消费者,它们在执行生产活动和消费活动中要对缓冲池进行操作。由于缓冲池是一个临界资源,必须互斥使用,所以,另外还需要设置一个互斥信号量mutex,其初值为1。 var mutex, empty, full: semaphone:=1, n, 0; buffer: array[0, …, n-1] of item; in, out: integer=0, 0; * 生产者/消费者问题(解决) * Consumerj: begin repeat wait(full); wait(mutex); 从Buffer[out]取产品; out = (out+1) mod n; signal(mutex); signal(empty); 消费产品; } parend; parbeginprocedurei: begin repeat 生产产品; wait(empty); wait(mutex); 往Buffer [in]放产品; in := (in+1) mod n; signal(mutex); signal(full); end 生产者/消费者问题(思考) 在生产者进程和消费者进程中,两个wait操作的执行顺序是否能交换?两个signal操作的执行顺序是否能交换? * 思考题 两个进程合作完成数据计算和打印工作,计算进程未计算完就不可打印,反之也然,双方共用一个缓冲区,写出此算法。 * 读者/写者问题 有两组并发进程: 读者和写者,共享一个数据文件 要求: 允许多个读者同时执行读操作 不允许读者、写者同时操作 不允许多个写者同时操作 * 读者/写者问题 如果读者来: 1)无读者、写者,新读者可以读 2)有写者等,但有其它读者正在读,则新读者也可以读 3)有写者写,新读者等 如果写者来: 1)无读者、写者,新写者可以写 2)有读者,新写者等待 3)有其它写者,新写者等待 * 读者写者问题的解法 为实现读者和写者、写者和写者之间的互斥,设置一个互斥信号量Wmutex=1 由于“读—读”允许,再设置一个整型变量Readcount表示正在读的进程数,初值Readcount=0 由于Readcount是一个可被多个读者进程访问的临界资源 ,所以要为它设置一个互斥信号量Rmutex=1 读者—写者算法如下: * 读者: begin wait(Rmutex); if readcount=0 then wait(Wmutex); Readcount:= Readcount+1; signal(Rmutex); 读 wait(Rmutex); Readcount:= Readcount-1; if Readcount=0 then signal(Wmutex); signal(Rmutex); end 写者: begin wait(Wmutex); 写 signal(Wmutex); end 哲学家就餐问题 有五个哲学家围坐在一圆桌旁,桌中央有一盘通心粉,每人面前有一只空盘子,每两人之间放一只筷子 每个哲学家的行为是思考,感到饥饿,取筷子

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值