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

实现进程互斥

关于进程互斥的理解,我们不妨先看看下面这样一段代码,可以看到p1或者p2谁先调用了p方法就会上锁,其他进程就无法走到临界区了,知道执行p操作的进程,调用了v方法才会释放进程

在这里插入图片描述如下图所示,进程也是同理的,p1执行p操作时候,p2就无法进入临界区拿到打印机这个资源,只有等到p1进程执行了v操作释放了锁,P2才能进入临界区
在这里插入图片描述

实现进程同步

关于同步,我们不妨也看看下面这样一段代码,他做的事情也很简单,就是要求p1的代码1、代码2必须发生于p2所有代码之前,所以我们就在必须将信号量设置为0,如下图所示
在这里插入图片描述
可以看到这样就使得下面代码出现这样两种情况:

  1. p1先行,完成v操作,信号量+1,p2进程在代码1和代码2执行后而执行
  2. p2先行,但是信号量s为0,它用完cpu时间片后,执行权到p1手里,p1执行到v操作,p2又可以继续执行了

在这里插入图片描述
所以使用信号量保证了上述代码如下谁先执行,我们所需要的同步操作确实得到了保证

实现进程的前驱关系

如下图所示,就以s1为例,这张关系图就是要求s1必须在s2,s3之前执行,所以我们在s1左右分别设置两个信号量a b,然后对s1左右节点设置v命令,需要后执行的s2、s3设置p命令等待s1发出v操作使得信号量+1再继续执行

在这里插入图片描述
翻译成代码就如下所示
在这里插入图片描述


版权声明:本文为shark_chili3007原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。