Updated: 2022/Sep/29
Please read Privacy Policy. It's for your privacy.
PTHREAD_MUTEXATTR(3) Library Functions Manual PTHREAD_MUTEXATTR(3) NAME pthread_mutexattr_init, pthread_mutexattr_destroy, pthread_mutexattr_setprioceiling, pthread_mutexattr_getprioceiling, pthread_mutexattr_setprotocol, pthread_mutexattr_getprotocol, pthread_mutexattr_settype, pthread_mutexattr_gettype, pthread_mutexattr_getpshared, pthread_mutexattr_setpshared - mutex attribute operations LIBRARY POSIX Threads Library (libpthread, -lpthread) SYNOPSIS #include <pthread.h> int pthread_mutexattr_init(pthread_mutexattr_t *attr); int pthread_mutexattr_destroy(pthread_mutexattr_t *attr); int pthread_mutexattr_setprioceiling(pthread_mutexattr_t *attr, int prioceiling); int pthread_mutexattr_getprioceiling(pthread_mutexattr_t *attr, int *prioceiling); int pthread_mutexattr_setprotocol(pthread_mutexattr_t *attr, int protocol); int pthread_mutexattr_getprotocol(pthread_mutexattr_t *attr, int *protocol); int pthread_mutexattr_settype(pthread_mutexattr_t *attr, int type); int pthread_mutexattr_gettype(pthread_mutexattr_t * restrict attr, int * restrict type); int pthread_mutexattr_getpshared(const pthread_mutexattr_t * __restrict attr, int * __restrict pshared); int pthread_mutexattr_setpshared(pthread_mutexattr_t * attr, int pshared); DESCRIPTION Mutex attributes are used to specify parameters to pthread_mutex_init(). Like with thread attributes, one attribute object can be used in multiple calls to pthread_mutex_init(3), with or without modifications between calls. The pthread_mutexattr_init() function initializes attr with all the default mutex attributes. The pthread_mutexattr_destroy() function destroys attr. The pthread_mutexattr_settype() functions set the mutex type value of the attribute. Valid mutex types are: PTHREAD_MUTEX_NORMAL This type of mutex does not check for usage errors. It will deadlock if reentered, and result in undefined behavior if a locked mutex is unlocked by another thread. Attempts to unlock an already unlocked PTHREAD_MUTEX_NORMAL mutex will result in undefined behavior. PTHREAD_MUTEX_ERRORCHECK These mutexes do check for usage errors. If an attempt is made to relock a PTHREAD_MUTEX_ERRORCHECK mutex without first dropping the lock, an error will be returned. If a thread attempts to unlock a PTHREAD_MUTEX_ERRORCHECK mutex that is locked by another thread, an error will be returned. If a thread attempts to unlock a PTHREAD_MUTEX_ERRORCHECK thread that is unlocked, an error will be returned. PTHREAD_MUTEX_RECURSIVE These mutexes allow recursive locking. An attempt to relock a PTHREAD_MUTEX_RECURSIVE mutex that is already locked by the same thread succeeds. An equivalent number of pthread_mutex_unlock(3) calls are needed before the mutex will wake another thread waiting on this lock. If a thread attempts to unlock a PTHREAD_MUTEX_RECURSIVE mutex that is locked by another thread, an error will be returned. If a thread attempts to unlock a PTHREAD_MUTEX_RECURSIVE thread that is unlocked, an error will be returned. It is advised that PTHREAD_MUTEX_RECURSIVE mutexes are not used with condition variables. This is because of the implicit unlocking done by pthread_cond_wait(3) and pthread_cond_timedwait(3). PTHREAD_MUTEX_DEFAULT Also this type of mutex will cause undefined behavior if reentered. Unlocking a PTHREAD_MUTEX_DEFAULT mutex locked by another thread will result in undefined behavior. Attempts to unlock an already unlocked PTHREAD_MUTEX_DEFAULT mutex will result in undefined behavior. This is the default mutex type for pthread_mutexattr_init(). The pthread_mutexattr_gettype() functions copy the type value of the attribute to the location pointed to by the second parameter. The pthread_mutexattr_getpshared() function obtains the value of the process-shared attribute from the attributes object referenced by attr. The pthread_mutexattr_setpshared() function is used to set the process- shared attribute in an initialised attributes object referenced by attr. The pthread_mutexattr_getprotocol() and pthread_mutexattr_setprotocol() functions shall get and set the protocol attribute of a mutex attributes object pointed to by attr which was previously created by the function pthread_mutexattr_init(). The pthread_mutexattr_getprioceiling() and pthread_mutexattr_setprioceiling() functions, shall get and set the priority ceiling attribute of a mutex attributes object pointed to by attr which was previously created by the function pthread_mutexattr_init(). RETURN VALUES If successful, these functions return 0. Otherwise, an error number is returned to indicate the error. ERRORS The pthread_mutexattr_init() function shall fail if: [ENOMEM] Insufficient memory exists to initialize the mutex attributes object. The pthread_mutexattr_settype() function shall fail if: [EINVAL] The value specified either by type or attr is invalid. No error numbers are defined for the pthread_mutexattr_destroy() and pthread_mutexattr_gettype() functions. pthread_mutexattr_setprioceiling() may fail if: [EINVAL] Invalid value for attr, or invalid value for prioceiling. pthread_mutexattr_getprioceiling() may fail if: [EINVAL] Invalid value for attr. pthread_mutexattr_setprotocol() may fail if: [EINVAL] Invalid value for attr, or invalid value for protocol. pthread_mutexattr_getprotocol() may fail if: [EINVAL] Invalid value for attr. pthread_mutexattr_getpshared() and pthread_mutexattr_setpshared() may fail if: [EINVAL] the value specified by attr is invalid. SEE ALSO pthread_mutex_init(3) STANDARDS These functions conform to IEEE Std 1003.1-2001 ("POSIX.1"). BUGS The pthread_mutexattr_getpshared() and pthread_mutexattr_setpshared() functions are hidden by default since only thread shared attributes are supported. NetBSD 10.99 June 12, 2016 NetBSD 10.99