sem_post関数は,セマフォに対してセマフォ・ロック解除操作を実行して,指定されたセマフォのロックを解除します。ロック関数あるいはロック解除関数
sem_wait,
sem_trywait,および
sem_postを呼び出す前に,セマフォに対して適切な関数 (名前付きセマフォの場合は
sem_open,名前なしセマフォの場合は
sem_init) が呼び出されていなければなりません。
sem_post関数の後,セマフォ値が正数の場合,セマフォのロック解除を待つためのプロセスのブロックは行われず,セマフォ値が増加します。
sem_post関数の後,セマフォ値がゼロになる場合,セマフォを待ってブロックされているプロセスのうちの 1 つが,正常に
sem_wait呼び出しから処理を戻すことができます。
セマフォを待ってブロックされているプロセスが複数ある場合,それらのうち 1 つのプロセスだけがロックを解除され,
sem_post関数の処理が戻った際セマフォの状態は変更無くそのまま維持されます。ブロックが解除されるプロセスは,ブロックされているすべてのプロセスのスケジューリング・ポリシーと優先度に従って選択されます。スケジューリング・ポリシーが SCHED_FIFO あるいは SCHED_RR, の場合,もっとも優先度が高い待ちプロセスのブロックが解除されます。最も優先度の高いプロセスが複数存在する場合は,そのうち最も長い期間待っているプロセスのブロックが解除されます。
sem_post関数は,シグナル捕捉関数から呼び出すことができます。