Copyright Digital Equipment Corp. All rights reserved.

Description

   The sem_post function unlocks the specified semaphore by
   performing the semaphore unlock operation on that semaphore. The
   appropriate function (sem_open for named semaphores or sem_init
   for unnamed semaphores) must be called for a semaphore before
   you can call the locking and unlocking functions, sem_wait, sem_
   trywait, and sem_post.

   If the semaphore value after a sem_post function is positive, no
   processes were blocked waiting for the semaphore to be unlocked;
   the semaphore value is incremented. If the semaphore value after
   a sem_post function is zero, one of the processes blocked waiting
   for the semaphore is allowed to return successfully from its call
   to sem_wait.

   If more than one process is blocked while waiting for the
   semaphore, only one process is unblocked and the state of
   the semaphore remains unchanged when the sem_post function
   returns. The process to be unblocked is selected according to
   the scheduling policies and priorities of all blocked processes.
   If the scheduling policy is SCHED_FIFO or SCHED_RR, the highest-
   priority waiting process is unblocked. If more than one process
   of that priority is blocked, then the process that has waited the
   longest is unblocked.

   The sem_post function can be called from a signal-catching
   function.