sem_post サブルーチン

目的

セマフォーをアンロックします。

ライブラリー

標準 C ライブラリー (libc.a)

構文

#include <semaphore.h>

int sem_post (sem)
sem_t *sem;

説明

sem_post サブルーチンは、セマフォーに対してセマフォー・アンロック操作を実行することによって、 sem パラメーターによって参照されるセマフォーをアンロックします。

この操作の結果のセマフォー値が正の場合、セマフォーがアンロックされるのを待機してブロックされたスレッドはなく、セマフォー値が増分されます。

この操作の結果のセマフォーの値がゼロの場合、セマフォーを待機してブロックされたスレッドの 1 つは、 sem_wait サブルーチンへの呼び出しから正常に戻ることができます。 プロセス・スケジューリング・オプションがサポートされている場合、非ブロック化されるスレッドは、ブロックされたスレッドに対して有効なスケジューリング・ポリシーおよびパラメーターに適した方法で選択されます。 スケジューラー SCHED_FIFO および SCHED_RR の場合、最も優先順位の高い待機スレッドは非ブロック化され、セマフォーを待機してブロックされている最も優先順位の高いスレッドが複数ある場合は、最も長く待機している最も優先順位の高いスレッドが非ブロック化されます。 プロセス・スケジューリング・オプションが定義されていない場合、ブロック解除するスレッドの選択は指定されません。

Process Sporadic Server オプションがサポートされており、スケジューリング・ポリシーが SCHED_SPORADIC である場合、セマンティクスは前の段落の SCHED_FIFO と同じです。

sem_post サブルーチンは、シグナルに関して再入可能であり、シグナル・キャッチング関数から呼び出すことができます。

パラメーター

項目 説明
SEM アンロックするセマフォーを指定します。

戻り値

正常に実行された場合、 sem_post サブルーチンはゼロを戻します。 そうでない場合は-1を返し、エラーを示すerrnoをセットする。

エラー・コード

sem_post サブルーチンは、以下の場合に失敗します。
項目 説明
EACCES 名前なしセマフォーへのアクセスは拒否されます。
EFAULT ユーザー・アドレスが無効です。
EIDRM 必要な操作中にセマフォーが除去されました。
EINVAL sem パラメーターが有効なセマフォーを参照していません。
ENOMEM 必要な操作のためのメモリーが不足しています。
ENOTSUP この機能は、チェックポイント再始動されたプロセスではサポートされません。