PTHREAD_MUTEXATTR(3) BSD Library Functions Manual PTHREAD_MUTEXATTR(3)
pthread_mutexattr_init, pthread_mutexattr_destroy, pthread_mutexattr_settype,
pthread_mutexattr_gettype -- mutex attribute operations
POSIX Threads Library (libpthread, -lpthread)
pthread_mutexattr_settype(pthread_mutexattr_t *attr, int type);
pthread_mutexattr_gettype(pthread_mutexattr_t * restrict attr, int * restrict type);
Mutex attributes are used to specify parameters to pthread_mutex_init(). Like with thread
attributes, one attribute object can be used in multiple calls to pthread_mutex_init(3),
with or without modifications between calls.
The pthread_mutexattr_init() function initializes attr with all the default mutex
The pthread_mutexattr_destroy() function destroys attr.
The pthread_mutexattr_settype() functions set the mutex type value of the attribute. Valid
mutex types are:
This type of mutex does not check for usage errors. It will deadlock if reentered,
and result in undefined behavior if a locked mutex is unlocked by another thread.
Attempts to unlock an already unlocked PTHREAD_MUTEX_NORMAL mutex will result in
These mutexes do check for usage errors. If an attempt is made to relock a
PTHREAD_MUTEX_ERRORCHECK mutex without first dropping the lock, an error will be
returned. If a thread attempts to unlock a PTHREAD_MUTEX_ERRORCHECK mutex that is
locked by another thread, an error will be returned. If a thread attempts to unlock
a PTHREAD_MUTEX_ERRORCHECK thread that is unlocked, an error will be returned.
These mutexes allow recursive locking. An attempt to relock a
PTHREAD_MUTEX_RECURSIVE mutex that is already locked by the same thread succeeds. An
equivalent number of pthread_mutex_unlock(3) calls are needed before the mutex will
wake another thread waiting on this lock. If a thread attempts to unlock a
PTHREAD_MUTEX_RECURSIVE mutex that is locked by another thread, an error will be
returned. If a thread attempts to unlock a PTHREAD_MUTEX_RECURSIVE thread that is
unlocked, an error will be returned.
It is advised that PTHREAD_MUTEX_RECURSIVE mutexes are not used with condition vari-
ables. This is because of the implicit unlocking done by pthread_cond_wait(3) and
Also this type of mutex will cause undefined behavior if reentered. Unlocking a
PTHREAD_MUTEX_DEFAULT mutex locked by another thread will result in undefined behav-
ior. Attempts to unlock an already unlocked PTHREAD_MUTEX_DEFAULT mutex will result
in undefined behavior.
This is the default mutex type for pthread_mutexaddr_init().
The pthread_mutexattr_gettype() functions copy the type value of the attribute to the loca-
tion pointed to by the second parameter.
If successful, these functions return 0. Otherwise, an error number is returned to indicate
The pthread_mutexattr_init() function shall fail if:
[ENOMEM] Insufficient memory exists to initialize the mutex attributes object.
The pthread_mutexattr_settype() function shall fail if:
[EINVAL] The value specified either by type or attr is invalid.
No error numbers are defined for the pthread_mutexattr_destroy() and
These functions conform to IEEE Std 1003.1-2001 (``POSIX.1'').
BSD July 9, 2010 BSD