unlockl カーネル・サービス
目的
従来のプロセス・ロックをアンロックします。
構文
#include <sys/types.h>
#include <sys/errno.h> void unlockl ( lock_word)
lock_t *lock_word;
lock_t *lock_word;
パラメーター
| 項目 | 説明 |
|---|---|
| ロック・ワード | ロック・ワードのアドレスを指定します。 |
説明
注: アンロック カーネル・サービスは互換性のみを目的として提供されており、新規コードでは使用しないでください。新規コードでは、代わりに単純ロックまたは 複合ロックを使用する必要があります。
アンロック カーネル・サービスは、 従来のロックをアンロックします。 ロックをアンロックできるのは、ロックの所有者のみです。 ロックがアンロックされると、ロックを待機している最も優先順位の高いスレッド (ある場合) が実行可能になり、ロックのために再度競合する可能性があります。 ロックを待機しているプロセスが少なくとも 1 つあった場合は、呼び出し元の優先順位が再計算されます。 システム・コールの優先使用 では、システム・コールがグローバル・データにアクセスする際に カーネル・サービスのロック を使用する方法について説明します。
ロック および アンロック サービスは、ネスト・レベル・カウントを維持しません。 アンロック サービスを 1 回呼び出すだけで、呼び出し元のロックがアンロックされます。 ロックをアンロックするタイミングを判別するには、 ロック サービスからの戻りコードを使用する必要があります。
注: アンロック カーネル・サービスは、イベントまたはロック・ワードが固定されている場合にのみ、割り込みを無効にして呼び出すことができます。
実行環境
アンロック カーネル・サービスは、 プロセス環境 からのみ呼び出すことができます。
戻り値
アンロック サービスには戻り値はありません。
例
アンロック サービスの呼び出しは、次のようにコーディングできます。
int lock_ret; /* return code from lockl() */
extern int lock_word; /* lock word that is external
and was initialized to
LOCK_AVAIL */
...
/* get lock prior to using resource */
lock_ret = lockl(lock_word, LOCK_SHORT)
/* use resource for which lock was obtained */
...
/* release lock if this was not a nested use */
if ( lock_ret != LOCK_NEST )
unlockl(lock_word);