Linux 是否必须从系统调用调用down(信号量)和down_intterruptible(信号量)?
有人问我是否可以使用以下功能:Linux 是否必须从系统调用调用down(信号量)和down_intterruptible(信号量)?,linux,linux-kernel,semaphore,interrupt-handling,interrupt,Linux,Linux Kernel,Semaphore,Interrupt Handling,Interrupt,有人问我是否可以使用以下功能: void down(struct semaphore* sem); int down_intterruptible(struct semaphore* sem); 仅从系统调用?不,它们可以从允许您睡眠的任何内核上下文中使用。例如,内核线程可以执行down()。当然计时器函数不能,因为down()可能会休眠。您肯定不需要直接处理系统调用 另一方面,在现代内核中,struct mutex和mutex\u lock()优于struct semaphore和down(
void down(struct semaphore* sem);
int down_intterruptible(struct semaphore* sem);
仅从系统调用?不,它们可以从允许您睡眠的任何内核上下文中使用。例如,内核线程可以执行
down()
。当然计时器函数不能,因为down()
可能会休眠。您肯定不需要直接处理系统调用
另一方面,在现代内核中,
struct mutex
和mutex\u lock()
优于struct semaphore
和down()
,除非您确实需要计算信号量,或者需要从与获取信号量不同的上下文中释放信号量。不一定。您可以尝试从内核的任何位置锁定信号量,但中断上下文除外。未能获取信号量将使您的任务处于休眠状态,并且您负担不起将中断处理程序置于休眠状态并导致死锁
你可以用