竞争是协作的特例,竞争关系是属于协作关系
信号量可以解决协作关系存在的问题,那么它也可以解决竞争关系存在的问题
信号量
信号量就是一个整数
先等待,然后再发送信号
p在荷兰语中代表测试
v在荷兰语代表增加
这个函数的执行流需要自己画,假设有四个进程并发执行
这里只是一个顺序执行产生的并发流程,其实还有其他的流程
信号量区域可以划为临界区
上面的信号量叫做二值信号量
但是我们要注意这里的p操作和v操作都是原子操作(中途不能被打断),需要操作系统支持。
根据前面的算法
先执行到p(原子操作)的车子(蓝色)会先进入critical section,而如果这时候红色车子进来,那么因为mutex=0了,所以此时会进入while循环(busy waiting),等待蓝车通过critical section,红车才会执行,然后蓝车释放,红车通过critical section,红车释放。
一般信号量
除了二值信号量,其他的信号量都是一般信号量
将信号值定义为2,那么只能同时跑两个进程并发
测试执行顺序1——2——3
增加执行顺序
2——3——1——3
车辆执行顺序
这里如果road等于0,那么一个是会出现我们前面讲的死锁,这个死锁是任何进程都无法进入road。