3用PN原语分别实现下面进程同步和进程互斥问题。1两个进程P1和P2共享1个变量;2进程关系图如下所示:
(1)进程同步问题:
P1: PN_BEGIN PN_WAITUNTIL(lock = 0); lock := 1; // 访问共享变量 lock := 0; PN_END
P2: PN_BEGIN PN_WAITUNTIL(lock = 0); lock := 1; // 访问共享变量 lock := 0; PN_END
其中,lock为共享的变量,初始值为0。PN_WAITUNTIL表示等待直到括号内的条件为真。
(2)进程互斥问题:
P1: PN_BEGIN PN_WAITUNTIL(flag2 = 0); flag1 := 1; // 访问共享资源 flag1 := 0; PN_END
P2: PN_BEGIN PN_WAITUNTIL(flag1 = 0); flag2 := 1; // 访问共享资源 flag2 := 0; PN_END
其中,flag1和flag2为两个进程的标志位,初始值均为0。PN_WAITUNTIL表示等待直到括号内的条件为真。当一个进程正在访问共享资源时,另一个进程会等待。这样就保证了进程互斥。
原文地址: https://www.cveoy.top/t/topic/bQEm 著作权归作者所有。请勿转载和采集!