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 type)
int
pthread_mutexattr_gettype(pthread_mutexattr_t * restrict attr, int * restrict type)
).
One attribute object can be used in multiple calls to
pthread_mutex_init(),
with or without modifications between calls.
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:
PTHREAD_MUTEX_NORMAL,
PTHREAD_MUTEX_ERRORCHECK,
PTHREAD_MUTEX_RECURSIVE,
and
PTHREAD_MUTEX_DEFAULT.
The default mutex type for
pthread_mutexaddr_init()
is
PTHREAD_MUTEX_DEFAULT.
PTHREAD_MUTEX_NORMAL
mutexes do not check for usage errors.
PTHREAD_MUTEX_NORMAL
mutexes 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 undefined behavior.
PTHREAD_MUTEX_ERRORCHECK
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.
PTHREAD_MUTEX_RECURSIVE
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.
PTHREAD_MUTEX_DEFAULT
mutexes result in 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.
pthread_mutexattr_gettype()
functions copy the type value of the attribute to the location
pointed to by the second parameter.
)
shall fail if:
ENOMEM]
pthread_mutexattr_settype()
shall fail if:
EINVAL]type
is invalid.
pthread_mutexattr_destroy(),
pthread_mutexattr_settype(),
and
pthread_mutexattr_gettype()
may fail if:
EINVAL]attr.
),
pthread_mutexattr_destroy(),
pthread_mutexattr_settype(),
and
pthread_mutexattr_gettype()
conform to
ISO/IEC 9945-1:1996 (``POSIX.1'') .