有人問我,如果我可以使用下列功能:下來(信號量)和down_intterruptible(信號量)必須從系統調用中調用?
void down(struct semaphore* sem);
int down_intterruptible(struct semaphore* sem);
只能從系統調用?
有人問我,如果我可以使用下列功能:下來(信號量)和down_intterruptible(信號量)必須從系統調用中調用?
void down(struct semaphore* sem);
int down_intterruptible(struct semaphore* sem);
只能從系統調用?
不,它們可以在你允許睡覺的任何內核環境中使用。例如,內核線程可能會做down()
。當然,定時器功能不能,因爲down()
可能會睡眠。您絕對不需要直接處理系統調用。
順便說一句,在現代內核,struct mutex
和mutex_lock()
是首選struct semaphore
併除外,你真正需要的計數信號,還是需要從不同的環境比在那裏獲得釋放信號量的情況下down()
。
不一定。除了中斷上下文之外,您可以嘗試鎖定內核中的任何位置的信號量。沒有獲得一個信號量會讓你的任務進入睡眠狀態,你不能讓你的中斷處理程序進入睡眠狀態並導致死鎖。
您可以使用