NAME
mtx_destroy
mtx_init — destroy and
initialize a mutex
SYNOPSIS
#include
<threads.h>
void mtx_destroy(mtx_t *mtx); int mtx_init(mtx_t *mtx, int type);
DESCRIPTION
[CX] The functionality described on this reference page is aligned with the ISO C standard. Any conflict between the requirements described here and the ISO C standard is unintentional. This volume of POSIX.1-2024 defers to the ISO C standard.
The mtx_destroy () function shall release
any resources used by the mutex pointed to by mtx. A
destroyed mutex object can be reinitialized using mtx_init
(); the results of otherwise referencing the object after it has been
destroyed are undefined. It shall be safe to destroy an initialized mutex
that is unlocked. Attempting to destroy a locked mutex, or a mutex that
another thread is attempting to lock, or a mutex that is being used in a
cnd_timedwait(3) or cnd_wait(3) call by
another thread, results in undefined behavior. The behavior is undefined if
the value specified by the mtx argument to
mtx_destroy () does not refer to an initialized
mutex.
The mtx_init () function shall initialize a mutex object with properties indicated by type, whose valid values include:
mtx_plain- for a simple non-recursive mutex,
mtx_timed- for a non-recursive mutex that supports timeout,
mtx_plain|mtx_recursive- for a simple recursive mutex, or
mtx_timed|mtx_recursive- for a recursive mutex that supports timeout.
If the mtx_init () function succeeds, it shall set the mutex pointed to by mtx to a value that uniquely identifies the newly initialized mutex. Upon successful initialization, the state of the mutex shall become initialized and unlocked. Attempting to initialize an already initialized mutex results in undefined behavior.
[CX] See V2_chap02(3) for further requirements.
These functions shall not be affected if the calling thread executes a signal handler during the call.
RETURN VALUE
The mtx_destroy () function shall not
return a value.
The mtx_init () function shall return
thrd_success on success or
thrd_error if the request could not be honored.
ERRORS
No errors are defined.
EXAMPLES
None.
APPLICATION USAGE
A mutex can be destroyed immediately after it is unlocked. However, since attempting to destroy a locked mutex, or a mutex that another thread is attempting to lock, or a mutex that is being used in a cnd_timedwait(3) or cnd_wait(3) call by another thread results in undefined behavior, care must be taken to ensure that no other thread may be referencing the mutex.
RATIONALE
These functions are not affected by signal handlers for the reasons stated in XRAT B.2.3 Error Numbers.
FUTURE DIRECTIONS
None.
SEE ALSO
XBD <threads.h>
CHANGE HISTORY
First released in Issue 8. Included for alignment with the ISO/IEC 9899:2018 standard.