🐶博主主页:@ᰔᩚ. 一怀明月ꦿ
❤️🔥专栏系列:线性代数,C初学者入门训练,题解C,C的使用文章,「初学」C++,linux
🔥座右铭:“不要等到什么都没有了,才下定决心去做”
🚀🚀🚀大家觉不错的话,就恳求大家点点关注,点点小爱心,指点指点🚀🚀🚀
目录
信号量
信号量的本质是一把“计数器”
多个执行流(进程)看到的同一份资源,其实就是公共资源(由os提供的),如果并发访问同一份资源,会导致数据不一致的问题,我们就应该对公共资源进行保护,可以利用可同步和互斥(在多线程的时候着重理解)来解决。
互斥:任何时刻只允许一个执行流(进程)访问公共资源,加锁实现的
同步:多个执行流(进程)执行的时候,按照一定顺序执行,条件变量实现
被保护起来的公共资源,临界资源
访问临界资源的代码,临界区
非临界资源
非临界区
维护临界资源,其实就是在维护临界区
原子性:只有2两种状态,要么做,要么不做
如何理解信号量
信号量:表示资源数目的计数器,每一个执行流(进程)想要访问公共资源内的某一份资源,不应该让执行流(进程)直接访问,而是先申请信号量资源,其实就是先对信号量计数器进行--操作。本质上--就完成了,对资源的预定机制
如果申请不成功?我们的执行流(进程)被阻塞,等到申请成功
申请信号量资源是--
释放信号量资源是++
二元信号量:起到了互斥的效果(因为信号量资源只有一份),互斥锁
1.意味着,每一个进程都先看到同一个信号量资源 2.信号量本质也是公共资源 3.单个信号量 struct sem { Int count; Task_strct* wait_queue }
信号
信号的概念
生活中的信号
红绿灯、下课铃声、狼烟、闹钟等等
我(进程)为什么知道信号呢?肯定我(进程)之前就了解过信号
信号没有产生的时候,其实我(进程)已经能够知道,怎么处理这个信号
信号的到来,我(进程)并清楚具体什么时候,信号到来相对于我(进程)正在做的工作,是异步产生的
信号产生了,我(进程)不一定立即处理它,而是我(进程)在合理的时候处理
我(进程)