summaryrefslogtreecommitdiff
path: root/linuxthreads/man/pthread_mutexattr_init.man
blob: b8389489046159aa397bf8f5c94596621c85d218 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
.TH PTHREAD_MUTEXATTR 3 LinuxThreads

.XREF pthread_mutexattr_destroy
.XREF pthread_mutexattr_settype
.XREF pthread_mutexattr_gettype

.SH NAME
pthread_mutexattr_init, pthread_mutexattr_destroy, pthread_mutexattr_settype, pthread_mutexattr_gettype \- mutex creation attributes

.SH SYNOPSIS
#include <pthread.h>

int pthread_mutexattr_init(pthread_mutexattr_t *attr);

int pthread_mutexattr_destroy(pthread_mutexattr_t *attr);

int pthread_mutexattr_settype(pthread_mutexattr_t *attr, int kind);

int pthread_mutexattr_gettype(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 !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_settype! sets the mutex kind attribute in |attr|
to the value specified by |kind|.

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

.SH "RETURN VALUE"
!pthread_mutexattr_init!, !pthread_mutexattr_destroy! and
!pthread_mutexattr_gettype! always return 0.

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

.SH ERRORS

On error, !pthread_mutexattr_settype! returns the following error code:
.TP
!EINVAL!
|kind| is neither !PTHREAD_MUTEX_FAST_NP! nor !PTHREAD_MUTEX_RECURSIVE_NP!
nor !PTHREAD_MUTEX_ERRORCHECK_NP!

.SH AUTHOR
Xavier Leroy <Xavier.Leroy@inria.fr>

.SH "SEE ALSO"
!pthread_mutex_init!(3),
!pthread_mutex_lock!(3),
!pthread_mutex_unlock!(3).