当前位置: 技术问答>linux和unix
为什么中断不能用信号量?
来源: 互联网 发布时间:2017-02-17
本文导语: 书上说 在中断中 型号两 导致睡眠 所以不能用 linux内核设计与实现,P148 问题我想不通的是,信号量导致的是进程睡眠,这个有什么错,又不是中断程序睡眠了。。 有人告诉我: 信号量是一种睡眠锁。如果有一...
书上说 在中断中 型号两 导致睡眠 所以不能用
linux内核设计与实现,P148
问题我想不通的是,信号量导致的是进程睡眠,这个有什么错,又不是中断程序睡眠了。。
有人告诉我:
信号量是一种睡眠锁。如果有一个任务试图获得一个已经被占用的信号量时,信号量会将其推进一个等待队列,然后让其睡眠。
对于上面的意思,比如一个进程用信号量加锁了一个数据,然后ISR去读,拿不到信号量,会导致ISR睡眠,那也就是说这个进程不能用信号量了,但是好像进程编程里不能使用自旋锁的吧
但是书上说“书上说 在中断中 型号两 导致睡眠 所以不能用”,显然说,在ISR中不能用信号量吧,秋介绍
linux内核设计与实现,P148
问题我想不通的是,信号量导致的是进程睡眠,这个有什么错,又不是中断程序睡眠了。。
有人告诉我:
信号量是一种睡眠锁。如果有一个任务试图获得一个已经被占用的信号量时,信号量会将其推进一个等待队列,然后让其睡眠。
对于上面的意思,比如一个进程用信号量加锁了一个数据,然后ISR去读,拿不到信号量,会导致ISR睡眠,那也就是说这个进程不能用信号量了,但是好像进程编程里不能使用自旋锁的吧
但是书上说“书上说 在中断中 型号两 导致睡眠 所以不能用”,显然说,在ISR中不能用信号量吧,秋介绍
|
没错,ISR要求尽快的返回,如果碰到信号量,导致睡眠,就会引起其他方面的问题,故不要使用它,可以使用spin lock