Copyright Digital Equipment Corp. All rights reserved.

Description

   This routine unlocks the mutex specified by the mutex argument.

   This routine behaves as follows, based on the type of the
   specified mutex:

   o  For a normal, default, or errorcheck mutex: if the mutex is
      owned by the calling thread, it is unlocked with no current
      owner. Further, for a normal or default mutex: if the mutex
      is not locked or is locked by another thread, this routine
      can also return [EPERM], but this is not guaranteed. For an
      errorcheck mutex: if the mutex is not locked or is locked by
      another thread, this routine returns [EPERM].

   o  For a recursive mutex: if the mutex is owned by the calling
      thread, the lock count is decremented. The mutex remains
      locked and owned until the lock count reaches zero (0). When
      the lock count reaches zero, the mutex becomes unlocked with
      no current owner.

   If one or more threads are waiting to lock the specified mutex,
   and the mutex becomes unlocked, this routine causes one thread
   to unblock and to try to acquire the mutex. The scheduling policy
   is used to determine which thread to unblock. For the SCHED_FIFO
   and SCHED_RR policies, a blocked thread is chosen in priority
   order, using first-in/first-out within priorities. Note that the
   mutex might not be acquired by the awakened thread, if any other
   running thread attempts to lock the mutex first.

   On Tru64 UNIX, if a signal is delivered to a thread waiting for
   a mutex, upon return from the signal handler, the thread resumes
   waiting for the mutex as if it was not interrupted.