信号量(上)

简介: 信号量(上)

竞争是协作的特例,竞争关系是属于协作关系

信号量可以解决协作关系存在的问题,那么它也可以解决竞争关系存在的问题

信号量

信号量就是一个整数

先等待,然后再发送信号

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。

相关文章
|
6月前
|
程序员
信号量和管程
信号量和管程
36 0
|
安全
理解信号量
理解信号量
|
6月前
多线程并发之Semaphore(信号量)使用详解
多线程并发之Semaphore(信号量)使用详解
2191 0
|
存储
信号量(下)
信号量(下)
43 0
|
机器学习/深度学习 C语言
信号量
信号量
88 0
Semaphore(信号量)介绍以及实例
Semaphore(信号量)介绍以及实例
180 0
Semaphore(信号量)介绍以及实例
信号量的使用
信号量的使用
197 0
|
Java 开发工具
信号量Semaphore及模型
信号量Semaphore
133 0
Semaphore信号量
Semaphore 可以用来限制或管理数量有限资源的使用情况 - 信号量的作用是用来维护一个“许可证”,的计数,线程可以获取 许可证,那信号量剩余许可证就减一,线程也可以是否一个许可证,那剩余的许可证就加一,当信号量拥有的许可证为0时,那么下一个线程想获得许可证,就要进行等待,直到另外线程释放许可证
279 0
Semaphore信号量
信号量Semaphore的使用
允许多个线程同时访问:信号量(Semaphore) 信号量为多线程协作提供了更为强大的控制方法。广义上说,信号量是对锁的扩展。无论是内部锁synchronized还是重入锁ReentrantLock,一次都只允许一个线程访问一个资源,而信号量指定多个线程访问同一个资源。
1333 0