文档详情

进程同步与通信.ppt

发布:2025-01-18约1.12万字共10页下载文档
文本预览下载声明

3.5进程通信*按交换信息量的大小,可以把进程之间的通信分成低级通信和高级通信。在低级通信中,进程之间只能传递状态信息和整数值,信号量机制属于低级通信方式。在高级通信中,进程之间可以传递任意数量的数据,传递的信息量大,操作系统隐藏了进程通信的实现细节,大大简化了进程通信程序编制上的复杂性。高级通信机制可分为三大类:0102用信号灯解决互斥问题*如果信号量的初值为1,表示仅允许一个进程访问临界区,此时的信号量转换为互斥信号量。010203P操作和V操作分别置于进入区和推出区。如定义mutex为互斥信号量,其初值为1,P,V操作的位置如书中图3-9 用信号灯解决互斥问题 semaphoremutex=1; P1: while(1){ P(mutex); 临界区; V(mutex); 剩余区; };P2: while(1){ P(mutex); 临界区 V(mutex); 剩余区; };用信号灯解决同步问题*0102030405即:可以控制进程执行的先后顺序semaphorea,b=0,0;{P(b);s3}{s1;V(a);V(b)}{P(a);s2}3.2经典进程同步问题*生产者——消费者问题读者——写者问题哲学家进餐问题打磕睡的理发师问题生产者-消费者问题*缓冲池是由若干个大小相等的缓冲区组成的,每个缓冲区可以容纳一个产品。生产者进程不断地将生产的产品放入缓冲池,消费者进程不断地将产品从缓冲池中取出。指有两组进程共享一个环形的缓冲池。一组进程被称为生产者,另一组进程被称为消费者。用信号量解决“生产者-消费者”问题*voidconsumer()//消费者进程{while(true){P(full);P(mutex);data_c=buffer[j];j=(j+1)%n;V(mutex);V(empty);consumetheitemindata_c;}}semaphoremutex=1;

semaphoreempty=n;

semaphorefull=0;inti,j;

ITEMbuffer[n];

ITEMdata_p,data_c;voidproducer()//生产者进程{while(true){produceanitemindata_p;P(empty);P(mutex);buffer[i]=data_p;i=(i+1)%n;V(mutex);V(full);}}读者-写者问题*一个数据对象若被多个并发进程所共享,且其中一些进程只要求读该数据对象的内容,而另一些进程则要求写操作,对此,我们把只想读的进程称为“读者”,而把要求写的进程称为“写者”。问题描述:读者可同时读;读者读时,写者不可写;写者写时,其他的读者、写者均不可进入。用信号量解决读者-写者问题*读者进程: while(true) { ‘有人要读’P(Wmutex); 读; ‘无人读了’V(Wmutex); }写者进程:while(true){ P(Wmutex); 写; V(Wmutex);}semaphoreWmutex=1;用信号量解决读者-写者问题*voidreader()/*读者进程*/{while(true){P(Rmutex); if(Rcount==0)P(Wmutex); Rcount=Rcount+1; V(Rmutex); read;/*执行读操作*/ P(Rmutex); Rcount=Rcount-1; if(Rcount==0)V(Wmutex); V(Rmutex);}}SemaphoreWmutex,Rmutex=1,1;intRcount;voidwriter()/*写者进程*/{while(true){P(Wmutex); write;/*执行写操作*/V(Wmutex);

显示全部
相似文档