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

 时间:2024-10-27 23:07:31

1、实现进程互斥2、实现进程同步3、实现进程的前驱关系

信号量机制实现进程互斥

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

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

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

信号量机制实现进程同步

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

2、/*信号量机制实现同步*/semaphore s = 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、其实每一对前驱关系都是一个进程同步问题(需要保证一前一后的操作),因此:1、要为每一对前驱关系各设置一个同步变量2、在“前操作”之后对相应的同步变量执行V操作3、在“后操作”之前对相应的同步变量执行P操作

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

  • 泰拉瑞亚中怎么召唤机械boss
  • 泰拉瑞亚烈焰塔怎么放置#校园分享#
  • 泰拉瑞亚怎么召唤克苏鲁之眼
  • 泰拉瑞亚手游怎么挖取获得铜矿?
  • 秘银砧怎么弄
  • 热门搜索
    我阅读我快乐手抄报 文明创建手抄报 儿童节手抄报内容大全 我爱读书手抄报的内容 三年级中秋节手抄报 教师节手抄报图片 电子手抄报模板下载 未来世界手抄报 感恩老师手抄报句子 文明礼仪手抄报资料