信号量中有pv两种操作,都需要保证原子性,以p操作为例,包含计数器减一和阻塞进程两个动作,之前看网友说难点主要在怎么保证计数器加减的原子性上,这个可以通过lock引脚控制来实现。那么我想问,阻塞动作不是比计数器加减更复杂么,而且要操作的数据也多的多,那操作系统是怎么实现计数器加减和阻塞一起的原子性的呢?
信号量中有pv两种操作,都需要保证原子性,以p操作为例,包含计数器减一和阻塞进程两个动作,之前看网友说难点主要在怎么保证计数器加减的原子性上,这个可以通过lock引脚控制来实现。那么我想问,阻塞动作不是比计数器加减更复杂么,而且要操作的数据也多的多,那操作系统是怎么实现计数器加减和阻塞一起的原子性的呢?
7 回答5.3k 阅读
4 回答4k 阅读
2 回答5.9k 阅读✓ 已解决
2 回答2.5k 阅读✓ 已解决
1 回答2.3k 阅读✓ 已解决
2 回答3.3k 阅读
1 回答3.6k 阅读
阻塞操作为什么需要原子性?! 你上面也说了重点在于计数器的原子加减。计数器是什么?就是一段内存啊,原子加减意思是修改这段内存的值的操作是一个cpu上的线程独占的。如何保证?Lock住总线呗,操作系统一般不会去管如何Lock总线,它只要这个cpu能提供这样的机制就ok了。比如x86,就是LOCK前缀的指令
补充:
直接看linux是怎么做的好了
所以不会存在你说的 计数器操作后又被抢占