.TH PTHREAD_MUTEXATTR 3 LinuxThreads .SH NAME pthread_mutexattr_init, pthread_mutexattr_destroy, pthread_mutexattr_setkind_np, pthread_mutexattr_getkind_np \- mutex creation attributes .SH SYNOPSIS .B #include .BI "int pthread_mutexattr_init(pthread_mutexattr_t *" attr ");" .BI "int pthread_mutexattr_destroy(pthread_mutexattr_t *" attr ");" .BI "int pthread_mutexattr_setkind_np(pthread_mutexattr_t *" attr ", int " kind ");" .BI "int pthread_mutexattr_getkind_np(const pthread_mutexattr_t *" attr ", int *" kind ");" .SH DESCRIPTION Mutex attributes can be specified at mutex creation time, by passing a mutex attribute object as second argument to .BR "pthread_mutex_init" (3). Passing .B "NULL" is equivalent to passing a mutex attribute object with all attributes set to their default values. .B "pthread_mutexattr_init" initializes the mutex attribute object .I "attr" and fills it with default values for the attributes. .B "pthread_mutexattr_destroy" destroys a mutex attribute object, which must not be reused until it is reinitialized. .B "pthread_mutexattr_destroy" does nothing in the LinuxThreads implementation. LinuxThreads supports only one mutex attribute: the mutex kind, which is either .B "PTHREAD_MUTEX_FAST_NP" for ``fast'' mutexes, .B "PTHREAD_MUTEX_RECURSIVE_NP" for ``recursive'' mutexes, or .B "PTHREAD_MUTEX_ERRORCHECK_NP" for ``error checking'' mutexes. As the .B "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 .BR "pthread_mutex_lock" (3). If the mutex is of the ``fast'' kind, .BR "pthread_mutex_lock" (3) simply suspends the calling thread forever. If the mutex is of the ``error checking'' kind, .BR "pthread_mutex_lock" (3) returns immediately with the error code .BR "EDEADLK" . If the mutex is of the ``recursive'' kind, the call to .BR "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 .BR "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, .BR "PTHREAD_MUTEX_FAST_NP" . .B "pthread_mutexattr_setkind_np" sets the mutex kind attribute in .I "attr" to the value specified by .IR "kind" . .B "pthread_mutexattr_getkind_np" retrieves the current value of the mutex kind attribute in .I "attr" and stores it in the location pointed to by .IR "kind" . .SH "RETURN VALUE" .BR "pthread_mutexattr_init" , .B "pthread_mutexattr_destroy" and .B "pthread_mutexattr_getkind_np" always return 0. .B "pthread_mutexattr_setkind_np" returns 0 on success and a non-zero error code on error. .SH ERRORS On error, .B "pthread_mutexattr_setkind_np" returns the following error code: .TP .B "EINVAL" .I "kind" is neither .B "PTHREAD_MUTEX_FAST_NP" nor .B "PTHREAD_MUTEX_RECURSIVE_NP" nor .B "PTHREAD_MUTEX_ERRORCHECK_NP" .SH AUTHOR Xavier Leroy .SH "SEE ALSO" .BR "pthread_mutex_init" (3), .BR "pthread_mutex_lock" (3), .BR "pthread_mutex_unlock" (3).