一、信号量和互斥量的区别
2018年12月29日
10:47
信号量强调做事的步骤,有先后。
信号量可以在任何任务、中断里释放信号量,释放了你才能做下一步。
信号量可能发生优先级翻转。
信号量不能递归获取,否则会把自己给挂起来的
互斥量强调所有权。独霸天下,我用的时候谁都不能用。
互斥量可以自己重复获取互斥量,递归的获取而不会被挂起,这就是所有权独霸权。
互斥量具有防止优先级反转的机制:优先级继承——互斥量被使用时,当被别的高优先级线程获取时,使用它的线程将临时提高线程的优先级和刚才获取互斥量的线程的优先级一样高。当持有者释放时才会恢复原来的优先级、并恢复最高优先级的被互斥量挂起的线程并执行调度。
应用场景:信号量,比如触控笔点击屏幕产生中断释放信号量对应线程运行。
互斥量:IIC总线的使用,其中一个设备在使用那么其他总线中的设备不能占用总线,这就需要互斥量来锁定。
二、事件和信号量的区别与联系
2018年12月29日
10:47
一、区别
1.信号量是一个值,只代表一个事件。
而事件是代表好多信号量。这就是信号量只能一对一的同步,一对一就是一个线程对一个信号量。
而事件可以是一对多,多对多。
事件中的值是代表32个事件的值。
事件可以看成多对多、一对多的同步,而信号量是一对一的同步。
2.信号量是take时,值自动减减,release时自动加加。相当于其值的变化是自动控制的。
而事件是手动控制,要不要清零,不清这个事件标志位一直存在。
二、联系
当事件只用到一个事件时,也就是值只用到一位时,事件和信号量的效果相同。
事件可以看成信号量的进化,是信号量的全集。信号量可以看成是事件的子集。
在某一条件下,事件和信号量效果相同,可以认为是等价的。
三、应用场景剖析
当只需一对一同步的时候,用信号量就够了。
当一对多,或多对多时用事件。