次の機能を使用できるかどうか尋ねられました。
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
andmutex_lock()
が優先されます。struct semaphore
down()