PTHREAD_MUTEXATTR(3)                         PTHREAD_MUTEXATTR(3)

       pthread_mutexattr_init,         pthread_mutexattr_destroy,
       pthread_mutexattr_setkind_np, pthread_mutexattr_getkind_np
       - mutex creation attributes

       #include <pthread.h>

       int pthread_mutexattr_init(pthread_mutexattr_t *attr);

       int pthread_mutexattr_destroy(pthread_mutexattr_t *attr);

       int       pthread_mutexattr_setkind_np(pthread_mutexattr_t
       *attr, int kind);

       int pthread_mutexattr_getkind_np(const pthread_mutexattr_t
       *attr, int *kind);

       Mutex  attributes can be specified at mutex creation time,
       by passing a mutex attribute object as second argument  to
       pthread_mutex_init(3).   Passing  NULL  is  equivalent  to
       passing a mutex attribute object with all  attributes  set
       to their default values.

       pthread_mutexattr_init  initializes  the  mutex  attribute
       object attr and fills  it  with  default  values  for  the

       pthread_mutexattr_destroy   destroys   a  mutex  attribute
       object, which must not be reused until  it  is  reinitial-
       ized.   pthread_mutexattr_destroy does nothing in the Lin-
       uxThreads implementation.

       LinuxThreads supports only one mutex attribute: the  mutex
       kind,  which  is either PTHREAD_MUTEX_FAST_NP for ``fast''
       mutexes,  PTHREAD_MUTEX_RECURSIVE_NP   for   ``recursive''
       mutexes, or PTHREAD_MUTEX_ERRORCHECK_NP for ``error check-
       ing'' mutexes.  As the NP suffix indicates, this is a non-
       portable extension to the POSIX standard and should not be
       employed in portable programs.

       The  mutex  kind  determines  what  happens  if  a  thread
       attempts   to   lock   a   mutex   it  already  owns  with
       pthread_mutex_lock(3).  If the mutex is  of  the  ``fast''
       kind,  pthread_mutex_lock(3)  simply  suspends the calling
       thread forever.  If the mutex is of the ``error checking''
       kind,  pthread_mutex_lock(3)  returns immediately with the
       error code EDEADLK.  If the mutex is of the  ``recursive''
       kind,  the  call  to pthread_mutex_lock(3) returns immedi-
       ately with a success return code. The number of times  the
       thread  owning  the mutex has locked it is recorded in the
       mutex. The owning thread must call pthread_mutex_unlock(3)
       the  same  number of times before the mutex returns to the
       unlocked state.

       The   default   mutex   kind   is   ``fast'',   that   is,

       pthread_mutexattr_setkind_np sets the mutex kind attribute
       in attr to the value specified by kind.

       pthread_mutexattr_getkind_np retrieves the  current  value
       of  the  mutex kind attribute in attr and stores it in the
       location pointed to by kind.

       pthread_mutexattr_init,   pthread_mutexattr_destroy    and
       pthread_mutexattr_getkind_np always return 0.

       pthread_mutexattr_setkind_np  returns  0  on success and a
       non-zero error code on error.

       On error, pthread_mutexattr_setkind_np returns the follow-
       ing error code:

       EINVAL kind    is    neither   PTHREAD_MUTEX_FAST_NP   nor
              PTHREAD_MUTEX_RECURSIVE_NP                      nor

       Xavier Leroy <>

       pthread_mutex_init(3),              pthread_mutex_lock(3),

                           LinuxThreads                         1