PTHREAD_MUTEX_INIT(3C) | Standard C Library Functions | PTHREAD_MUTEX_INIT(3C) |
pthread_mutex_init
,
pthread_mutex_destroy
—
initialize or destroy a mutex
#include
<pthread.h>
int
pthread_mutex_init
(pthread_mutex_t
*restrict mutex, const pthread_mutexattr_t *restrict
attr);
int
pthread_mutex_destroy
(pthread_mutex_t
*mutex);
pthread_mutex_t mutex
= PTHREAD_MUTEX_INITIALIZER
;
pthread_mutex_t ecmutex
=
PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP
;
pthread_mutex_t rmutex
=
PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP
;
The
pthread_mutex_init
()
function initializes the mutex referenced by mutex
with attributes specified by attr. If
attr is NULL
, the default
mutex attributes are used; the effect is the same as passing the address of
a default mutex attributes object. Upon successful initialization, the state
of the mutex becomes initialized and unlocked.
Except for robust mutexes, attempting to initialize an already initialized mutex results in undefined behavior.
The
pthread_mutex_destroy
()
function destroys the mutex object referenced by
mutex; the mutex object becomes, in effect,
uninitialized. A destroyed mutex object can be re-initialized using
pthread_mutex_init
(); the results of otherwise
referencing the object after it has been destroyed are undefined.
It is safe to destroy an initialized mutex that is unlocked. Attempting to destroy a locked mutex results in undefined behavior.
In cases where default mutex attributes
are appropriate, the macro PTHREAD_MUTEX_INITIALIZER
can be used to initialize mutexes that are statically allocated. The effect
is equivalent to dynamic initialization by a call to
pthread_mutex_init
()
with parameter attr specified as
NULL
.
In cases where error checking mutex
attributes are appropriate, the macro
PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP
can be used
to initialize mutexes that are statically allocated. The effect is
equivalent to dynamic initialization by a call to
pthread_mutex_init
()
with parameter attr initialized with
pthread_mutexattr_init(3C)
and its type set to PTHREAD_MUTEX_ERRORCHECK
.
In cases where recursive mutex
attributes are appropriate, the macro
PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP
can be used
to initialize mutexes that are statically allocated. The effect is
equivalent to dynamic initialization by a call to
pthread_mutex_init
()
with parameter attr initialized with
pthread_mutexattr_init(3C)
and its type set to PTHREAD_MUTEX_RECURSIVE
.
If successful, the pthread_mutex_init
()
and pthread_mutex_destroy
() functions return
0. Otherwise, an
error number is returned to indicate the error.
The pthread_mutex_init
() function will
fail if:
EAGAIN
EBUSY
EINVAL
ENOMEM
EPERM
The pthread_mutex_init
() function may fail
if:
EBUSY
EINVAL
The pthread_mutex_destroy
() function may
fail if:
EBUSY
EINVAL
pthread_cond_timedwait(3C), pthread_cond_wait(3C), pthread_mutex_lock(3C), pthread_mutexattr_init(3C), pthread_mutexattr_setrobust(3C), pthread_mutexattr_settype(3C), attributes(7), mutex(7)
February 17, 2023 | OmniOS |