0

次の機能を使用できるかどうか尋ねられました。

void down(struct semaphore* sem);
int down_intterruptible(struct semaphore* sem);

システムコールからのみ?

4

2 に答える 2

1

いいえ、スリープが許可されているカーネル コンテキストから使用しても問題ありません。たとえば、カーネル スレッドはdown(). もちろん、down()スリープする可能性があるため、タイマー機能はできません。システムコールを直接処理する必要はまったくありません。

余談ですが、最新のカーネルでは、セマフォをカウントする必要がある場合や、セマフォを取得した場所とは異なるコンテキストからセマフォを解放する必要がある場合を除いて、struct mutexandmutex_lock()が優先されます。struct semaphoredown()

于 2013-07-04T06:13:21.617 に答える