unlockl カーネル・サービス

目的

従来のプロセス・ロックをアンロックします。

構文

#include <sys/types.h>
#include <sys/errno.h>
void unlockl ( 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);