正在加载图片...
≯注意 >读者—写者问题 互斥和同步信号量的原语必须成对 读者进程 siga操作的次序无关紧要,但wait 写者进程(互斥的存取共享对象 操作的次序不能顺倒,否则会造成 系解决读写问题导致饥饿现象 死 class readersandwriters t 用AND信号量解决生产者消 贵者问题 int headcount: 的同多与通信0 semaphore x=new semaphore(1); semaphore wsem= new semaphore(1); ,xe public void reader i hile(true) wait(x); ublic void writer i headcount++: while(true)i wait(wsem); WRITEUNTO signal(x); signal(wsem READUNITO 的同步 public static void main(String args)i f(headcount==0) =0; signal(wsem) parbegin(reader, writer signal(x):) 1 哲学家进餐问题 public class diningphilosophers i semaphore fork=new semaphore 5(1) int 1: 作系统|进程的9 操 作 系 统 | 进 程 的 同 步 与 通 信 49 CUIT 徐虹 ¾注意: ¾互斥和同步信号量的原语必须成对 出现。 ¾signal操作的次序无关紧要,但wait 操作的次序不能颠倒,否则会造成 死锁。 ¾用AND信号量解决生产者——消 费者问题 操 作 系 统 | 进 程 的 同 步 与 通 信 50 CUIT 徐虹 ¾读者——写者问题 读者进程 写者进程(互斥的存取共享对象) 解决读写问题,导致饥饿现象 public class readersandwriters { int readcount; semaphore x = new semaphore(1); semaphore wsem = new semaphore(1); 操 作 系 统 | 进 程 的 同 步 与 通 信 51 CUIT 徐虹 public void reader() { while (true) { wait (x); readcount++; if (readcount == 1) wait (wsem); signal (x); READUNIT(); wait (x); readcount--; if (readcount == 0) signal (wsem); signal (x); } } 操 作 系 统 | 进 程 的 同 步 与 通 信 52 CUIT 徐虹 public void writer() { while (true) { wait (wsem); WRITEUNIT(); signal (wsem); } } public static void main (String args[]) { readcount = 0; parbegin (reader, writer); } 操 作 系 统 | 进 程 的 同 步 与 通 信 53 CUIT 徐虹 ¾哲学家进餐问题 操 作 系 统 | 进 程 的 同 步 与 通 信 54 CUIT 徐虹 public class diningphilosophers { semaphore [] fork = new semaphore[5](1); int i;
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有