有人问我是否可以使用以下功能:
void down(struct semaphore* sem);
int down_intterruptible(struct semaphore* sem);
仅来自系统调用?
有人问我是否可以使用以下功能:
void down(struct semaphore* sem);
int down_intterruptible(struct semaphore* sem);
仅来自系统调用?
不,它们可以在允许您睡眠的任何内核上下文中使用。例如,内核线程可能会做down()
. 当然定时器功能不能,因为down()
可能会休眠。您绝对不需要直接处理系统调用。
顺便说一句,在现代内核中,struct mutex
并且除了您真正需要计数信号量或需要从与获取信号量不同的上下文中释放信号量的情况外,它更受欢迎mutex_lock()
。struct semaphore
down()
不必要。您可以尝试在除中断上下文之外的任何位置锁定信号量。未能获取信号量将使您的任务进入睡眠状态,并且您无法让中断处理程序进入睡眠状态并导致死锁。
您可以使用