一、信号量描述前趋图
首先要搞清楚啥是PV,PV是用来实现进程互斥的操作,而wait和signal是其具体的原语
P(wait):申请资源操作
V(signal):释放资源操作
S:信号量,用来记录资源数量
例如S=3代表3个可用的空闲资源
执行P:wait(s)操作后,将申请一个可用资源,此时S-1
执行V:signal(s)操作后,将释放一个可用资源,此时S+1
那么此类题型,一般给你一个前趋图,让你写出信号量的执行函数
此图大致可以理解为,执行完S1后,释放a、b资源,S2需要a资源,s3需要b资源,依次顺序执行
解题过程:
-
首先,声明一堆变量,这些变量代表的是信号量
-
定义进程函数,执行相关操作如s1(),执行完释放资源v(a)、v(b),每个节点如果有前驱箭头,则需先申请资源
-
所有进程函数定义好后,编写main函数
-
对所有信号量进行初始化赋值为0,在cobegin与coend中并发执行所有进程函数
详情请见下图,看懂这代码,这类题型就差不多了