PTHREAD_MUTEXATTR(3) Library Functions Manual PTHREAD_MUTEXATTR(3)
pthread_mutexattr_settype, pthread_mutexattr_gettype -- mutex attribute
POSIX Threads Library (libpthread, -lpthread)
pthread_mutexattr_settype(pthread_mutexattr_t *attr, int type);
pthread_mutexattr_gettype(pthread_mutexattr_t * restrict attr, int *
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
The pthread_mutexattr_init() function initializes attr with all the
default mutex attributes.
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
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
It is advised that PTHREAD_MUTEX_RECURSIVE mutexes are not used
with condition variables. 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 behavior. 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 location pointed to by the second parameter.
If successful, these functions return 0. Otherwise, an error number is
returned to indicate the error.
The pthread_mutexattr_init() function shall fail if:
[ENOMEM] Insufficient memory exists to initialize the mutex
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'').
NetBSD 6.1.5 July 9, 2010 NetBSD 6.1.5