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