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

一,进程互斥

1,分析问题,设置临界区

2,设置互斥信号量S.value(临界资源),初值为1

3,进入临界区之前对信号量执行P操作(S.value--),互斥信号量值为0,表示资源被占用,切换到其它进程时,就不能继续执行而主动堵塞

4,离开临界区之后对信号量执行V操作(S.value++),互斥信号量值为1,此时其它进程就可以占用此资源,如果有进程正在堵塞中,就将堵塞队列中队头进程唤醒

二,进程同步

1,分析问题,找出哪里需要事件“一前一后”的同步关系,假设A进程在B进程之前执行

2,设置同步信号量(用来唤醒后面的B进程),初值为0

3,在A进程执行后,执行V操作(S.value++)这时value=1,告诉进程B,A进程已经完成了,你可以执行了,如果在进程A没有执行之前B进程先执行了,此时value=0,B进程知道A进程没有执行就主动进入堵塞状态。

4,在通过了对value值为1的检查后,B进程就可以访问临界区了,在B访问临界区之前需要执行P操作(S.value--)将value变为0,告诉其它进程该资源被占用,其它进程不能访问该临界资源

三,进程的前驱关系

1,分析问题,画出前驱图,把每一对前驱关系都看成一个同步问题

2,为每一个前驱关系设置不同的同步信号量,初值为0

3,在每个前进程执行之后,执行V操作,把同步信号量变为1,唤醒下一个进程

4,在每个后进程执行之后,执行P操作,把同步信号量变为0,不让其它进程访问该资源

猜你喜欢

转载自blog.csdn.net/weixin_44841312/article/details/105280985