Provided by: glibc-doc_2.36-0ubuntu4_all bug


       pthread_mutexattr_init,        pthread_mutexattr_destroy,       pthread_mutexattr_settype,
       pthread_mutexattr_gettype - 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_settype(pthread_mutexattr_t *attr, int kind);

       int pthread_mutexattr_gettype(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 attributes.

       pthread_mutexattr_destroy  destroys  a  mutex  attribute  object, which must not be reused
       until it is reinitialized. pthread_mutexattr_destroy  does  nothing  in  the  LinuxThreads

       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 checking'' 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 immediately 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

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

       pthread_mutexattr_settype  sets the mutex kind attribute in attr to the value specified by

       pthread_mutexattr_gettype 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_gettype  always
       return 0.

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


       On error, pthread_mutexattr_settype returns the following 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), pthread_mutex_unlock(3).

                                           LinuxThreads                      PTHREAD_MUTEXATTR(3)