养生 装修 购物 美食 感冒 便秘 营销 加盟 小吃 火锅 管理 创业 搭配 减肥 培训 旅游

用信号量机制实现进程互斥、同步、前驱关系

时间:2024-10-23 11:28:11

实现进程互斥实现进程同步实现进程的前驱关系

信号量机制实现进程互斥

1、/*信号量机制实现进程互斥*/semaphoremutex=1;//初始化信号量P1咯悝滩镞{}{...P(mutex);//使用临界资翮堠江辰源前需要加锁临界区代码段...V(mutex);//使用临界资源后需要解锁...}P2{}{...P(mutex);//使用临界资源前需要加锁临界区代码段...V(mutex);//使用临界资源后需要解锁...}

2、分析并发进程的关键活动,划定临界区(如对临界资源打印机的访问就应该放在临界区)。设置互斥信号量mutex,初值为1。在临界区之前执行P(mutex)。在临界区之后执行V(mutex)。

3、对不同的临界资源需要设置不同的互斥信号量。P、V操作必须成对出现。缺少P(mutex)就不能保证临界资源的互斥访问。缺少V(mutex)就会导致资源永不被释放,等待进程永不被唤醒。

信号量机制实现进程同步

1、用信号量实现进程同步:分析什么地方需要实现“同步关系”,即必须保证“一前一后”执行的两个操作。设置同步信号量s,初始为0。在“前操作”之后执行V(s)。在“后操作”之前执行P(s)。

2、/*信号量机制实现同步*/semaphores=0;P1{}{代码1;代码2;V(s);代码3;}P2{}{P(s);代码4;代码5;代码6;}

3、若先执行到V猾诮沓靥(s)操作,则s++后s=1。之后当执行到P(s)操作时,由于s=1,表示有可用资源,会执行s--,s的值变回0,P2进程不会执行block原语,而胡啥高友岛思继续往下执行代码4。若先执行到P(s)操作,由于s=0,s--后s=-1,表示此时没有可用资源,因此P操作中会执行block原语,主动请求阻塞。之后当执行完代码2,继而执行V(s)操作,s++,是s变回0,由于此时有进程在该信号量对应的阻塞队列中,因此会在V操作中执行wakeup原语,唤醒P2进程。这样P2就可以继续执行代码4了。

信号量机制实现前驱关系

1、进程P1中有句代码s1,P2中有句代码s2...P3...P6中有句代码s6.这些代码要求按如下前驱图所示的顺序来执行:s1--->s2,s1--->s3,s2--->s4,s2--->s5,s3--->s6,s4--->s6,s5--->s6。

2、其实每一对前驱关系都是一个进程同步问题(需要保证一前一后的操作),因此:要为每一对前驱关系各设置一个同步变量在“前操作”之后对相应的同步变量执行V操作在“后操作”之前对相应的同步变量执行P操作

3、P1(){...S1;V(A);V(B)...}P2(){...P(A);S2;V(C);V(D);}P3(){...P(B);S3;V(G);...}...

© 一点知识