PTHREAD_MUTEXATTR

NAME
SYNOPSIS
DESCRIPTION
RETURN VALUE
ERRORS
AUTHOR
SEE ALSO

NAME

pthread_mutexattr_init, pthread_mutexattr_destroy, pthread_mutexattr_setkind_np, pthread_mutexattr_getkind_np − mutex creation attributes

SYNOPSIS

#include <pthread.h>

int pthread_mutexattr_init(pthread_mutexattr_t *attr);

int pthread_mutexattr_destroy(pthread_mutexattr_t *attr);

int pthread_mutexattr_setkind_np(pthread_mutexattr_t *attr, int kind);

int pthread_mutexattr_getkind_np(const pthread_mutexattr_t *attr, int *kind);

DESCRIPTION

Mutex attributes can be specified at mutex creation time, by passing a mutex attribute object as second argument to pthread_mutex_init(3). Passing NULL is equivalent to passing a mutex attribute object with all attributes set to their default values.

pthread_mutexattr_init initializes the mutex attribute object attr and fills it with default values for the attributes.

pthread_mutexattr_destroy destroys a mutex attribute object, which must not be reused until it is reinitialized. pthread_mutexattr_destroy does nothing in the LinuxThreads implementation.

LinuxThreads supports only one mutex attribute: the mutex kind, which is either PTHREAD_MUTEX_FAST_NP for ‘‘fast’’ mutexes, PTHREAD_MUTEX_RECURSIVE_NP for ‘‘recursive’’ mutexes, or PTHREAD_MUTEX_ERRORCHECK_NP for ‘‘error checking’’ mutexes. As the NP suffix indicates, this is a non-portable extension to the POSIX standard and should not be employed in portable programs.

The mutex kind determines what happens if a thread attempts to lock a mutex it already owns with pthread_mutex_lock(3). If the mutex is of the ‘‘fast’’ kind, pthread_mutex_lock(3) simply suspends the calling thread forever. If the mutex is of the ‘‘error checking’’ kind, pthread_mutex_lock(3) returns immediately with the error code EDEADLK. If the mutex is of the ‘‘recursive’’ kind, the call to pthread_mutex_lock(3) returns immediately with a success return code. The number of times the thread owning the mutex has locked it is recorded in the mutex. The owning thread must call pthread_mutex_unlock(3) the same number of times before the mutex returns to the unlocked state.

The default mutex kind is ‘‘fast’’, that is, PTHREAD_MUTEX_FAST_NP.

pthread_mutexattr_setkind_np sets the mutex kind attribute in attr to the value specified by kind.

pthread_mutexattr_getkind_np retrieves the current value of the mutex kind attribute in attr and stores it in the location pointed to by kind.

RETURN VALUE

pthread_mutexattr_init, pthread_mutexattr_destroy and pthread_mutexattr_getkind_np always return 0.

pthread_mutexattr_setkind_np returns 0 on success and a non-zero error code on error.

ERRORS

On error, pthread_mutexattr_setkind_np returns the following error code:

EINVAL

kind is neither PTHREAD_MUTEX_FAST_NP nor

PTHREAD_MUTEX_RECURSIVE_NP nor PTHREAD_MUTEX_ERRORCHECK_NP

AUTHOR

Xavier Leroy <Xavier.Leroy@inria.fr>

SEE ALSO

pthread_mutex_init(3), pthread_mutex_lock(3), pthread_mutex_unlock(3).