pthread_mutexattr_getpshared.3t (2010 09)

p
pthread_mutexattr_getpshared(3T) pthread_mutexattr_getpshared(3T)
(Pthread Library)
PTHREAD_MUTEX_RECURSIVE
Deadlock cannot occur with this type of mutex. An owner field is maintained. A thread
attempting to relock this mutex shall successfully lock the mutex. Multiple locks of this mutex
shall require the same number of unlocks to release the mutex before another thread can lock
the mutex. A thread attempting to unlock a mutex locked by a different thread shall return
with an error. A thread attempting to unlock an unlocked mutex shall return with an error.
PTHREAD_MUTEX_NO_OWNER_NP
This type of mutex does not provide deadlock detection. A thread attempting to relock this
mutex without first unlocking it shall deadlock. An error is not returned to the caller. This
type of mutex can be unlocked by a thread other than the owner. Attempting to unlock an
unlocked mutex results in undefined behavior.
PTHREAD_MUTEX_DEFAULT
Attempting to recursively lock a mutex of this type results in undefined behavior. Attempting
to unlock a mutex locked by a different thread results in undefined behavior. Attempting to
unlock an unlocked mutex results in undefined behavior. An implementation shall be allowed
to map this mutex to one of the other mutex types.
The default value of the type attribute is
PTHREAD_MUTEX_DEAFULT
.
pthread_mutexattr_settype()
is used to set the type attribute in attr . The new value of the type
attribute of attr is set to the value specified in the type parameter.
pthread_mutexattr_gettype()
retrieves the value of the type attribute from attr . The value of
the type attribute of attr is returned in the type parameter.
Never use a
PTHREAD_MUTEX_RECURSIVE
mutex with condition variables because the implicit unlock
performed for a
pthread_cond_wait()
or pthread_cond_timedwait() may not actually release
the mutex if it had been locked multiple times. If this situation happens, no other thread can satisfy the
condition of the predicate.
RETURN VALUE
Upon successful completion,
pthread_mutexattr_getpshared()
,
pthread_mutexattr_setpshared()
, pthread_mutexattr_gettype()
, and
pthread_mutexattr_settype()
return zero. Otherwise, an error number is returned to indicate
the error (the
errno variable is not set).
ERRORS
If any of the following occur, the
pthread_mutexattr_getpshared()
and
pthread_mutexattr_setpshared()
functions return the corresponding error number:
[ENOSYS]
_POSIX_THREAD_PROCESS_SHARED
is not defined and these functions are not
supported.
For each of the following conditions, if the condition is detected, the
pthread_mutexattr_getpshared(), pthread_mutexattr_setpshared()
,
pthread_mutexattr_gettype(), and pthread_mutexattr_settype()
functions return the
corresponding error number:
[EINVAL] attr is not a valid mutex attributes object.
[EINVAL] The value specified by pshared or type is not a legal value. [EINVAL] The value
pshared or type points to an illegal address.
WARNINGS
If a mutex is created with the process-shared attribute defined as
PTHREAD_PROCESS_SHARED
, the
cooperating processes should have access to the memory in which the mutex is allocated.
AUTHOR
pthread_mutexattr_setpshared() and pthread_mutexattr_getpshared() were derived
from the IEEE POSIX P1003.1c standard.
pthread_mutexattr_settype(), and pthread_mutexattr_gettype() were developed by
X/Open.
2 Hewlett-Packard Company 2 HP-UX 11i Version 3: September 2010