summaryrefslogtreecommitdiffstats
path: root/man3p/pthread_mutex_lock.3p
diff options
context:
space:
mode:
Diffstat (limited to 'man3p/pthread_mutex_lock.3p')
-rw-r--r--man3p/pthread_mutex_lock.3p189
1 files changed, 189 insertions, 0 deletions
diff --git a/man3p/pthread_mutex_lock.3p b/man3p/pthread_mutex_lock.3p
new file mode 100644
index 000000000..d05a8907c
--- /dev/null
+++ b/man3p/pthread_mutex_lock.3p
@@ -0,0 +1,189 @@
+.\" Copyright (c) 2001-2003 The Open Group, All Rights Reserved
+.TH "PTHREAD_MUTEX_LOCK" P 2003 "IEEE/The Open Group" "POSIX Programmer's Manual"
+.\" pthread_mutex_lock
+.SH NAME
+pthread_mutex_lock, pthread_mutex_trylock, pthread_mutex_unlock \-
+lock and unlock a mutex
+.SH SYNOPSIS
+.LP
+\fB#include <pthread.h>
+.br
+.sp
+int pthread_mutex_lock(pthread_mutex_t *\fP\fImutex\fP\fB);
+.br
+int pthread_mutex_trylock(pthread_mutex_t *\fP\fImutex\fP\fB);
+.br
+int pthread_mutex_unlock(pthread_mutex_t *\fP\fImutex\fP\fB); \fP
+\fB
+.br
+\fP
+.SH DESCRIPTION
+.LP
+The mutex object referenced by \fImutex\fP shall be locked by calling
+\fIpthread_mutex_lock\fP(). If the mutex is already
+locked, the calling thread shall block until the mutex becomes available.
+This operation shall return with the mutex object
+referenced by \fImutex\fP in the locked state with the calling thread
+as its owner.
+.LP
+If the mutex type is PTHREAD_MUTEX_NORMAL, deadlock detection shall
+not be provided. Attempting to relock the mutex causes
+deadlock. If a thread attempts to unlock a mutex that it has not locked
+or a mutex which is unlocked, undefined behavior
+results.
+.LP
+If the mutex type is PTHREAD_MUTEX_ERRORCHECK, then error checking
+shall be provided. If a thread attempts to relock a mutex
+that it has already locked, an error shall be returned. If a thread
+attempts to unlock a mutex that it has not locked or a mutex
+which is unlocked, an error shall be returned.
+.LP
+If the mutex type is PTHREAD_MUTEX_RECURSIVE, then the mutex shall
+maintain the concept of a lock count. When a thread
+successfully acquires a mutex for the first time, the lock count shall
+be set to one. Every time a thread relocks this mutex, the
+lock count shall be incremented by one. Each time the thread unlocks
+the mutex, the lock count shall be decremented by one. When
+the lock count reaches zero, the mutex shall become available for
+other threads to acquire. If a thread attempts to unlock a mutex
+that it has not locked or a mutex which is unlocked, an error shall
+be returned.
+.LP
+If the mutex type is PTHREAD_MUTEX_DEFAULT, attempting to recursively
+lock the mutex results in undefined behavior. Attempting
+to unlock the mutex if it was not locked by the calling thread results
+in undefined behavior. Attempting to unlock the mutex if it
+is not locked results in undefined behavior.
+.LP
+The \fIpthread_mutex_trylock\fP() function shall be equivalent to
+\fIpthread_mutex_lock\fP(), except that if the mutex object
+referenced by \fImutex\fP is currently locked (by any thread, including
+the current thread), the call shall return immediately. If
+the mutex type is PTHREAD_MUTEX_RECURSIVE and the mutex is currently
+owned by the calling thread, the mutex lock count shall be
+incremented by one and the \fIpthread_mutex_trylock\fP() function
+shall immediately return success.
+.LP
+The \fIpthread_mutex_unlock\fP() function shall release the mutex
+object referenced by \fImutex\fP. \ The manner
+in which a mutex is released is dependent upon the mutex's type attribute.
+If there are threads blocked on the mutex object referenced by \fImutex\fP
+when \fIpthread_mutex_unlock\fP() is
+called, resulting in the mutex becoming available, the scheduling
+policy shall determine which thread shall acquire the mutex.
+.LP
+(In the case of PTHREAD_MUTEX_RECURSIVE mutexes, the mutex shall become
+available when the count reaches zero and the calling
+thread no longer has any locks on this mutex.)
+.LP
+If a signal is delivered to a thread waiting for a mutex, upon return
+from the signal handler the thread shall resume waiting
+for the mutex as if it was not interrupted.
+.SH RETURN VALUE
+.LP
+If successful, the \fIpthread_mutex_lock\fP() and \fIpthread_mutex_unlock\fP()
+functions shall return zero; otherwise, an
+error number shall be returned to indicate the error.
+.LP
+The \fIpthread_mutex_trylock\fP() function shall return zero if a
+lock on the mutex object referenced by \fImutex\fP is
+acquired. Otherwise, an error number is returned to indicate the error.
+.SH ERRORS
+.LP
+The \fIpthread_mutex_lock\fP() and \fIpthread_mutex_trylock\fP() functions
+shall fail if:
+.TP 7
+.B EINVAL
+The \fImutex\fP was created with the protocol attribute having the
+value PTHREAD_PRIO_PROTECT and the calling thread's
+priority is higher than the mutex's current priority ceiling.
+.sp
+.LP
+The \fIpthread_mutex_trylock\fP() function shall fail if:
+.TP 7
+.B EBUSY
+The \fImutex\fP could not be acquired because it was already locked.
+.sp
+.LP
+The \fIpthread_mutex_lock\fP(), \fIpthread_mutex_trylock\fP(), and
+\fIpthread_mutex_unlock\fP() functions may fail if:
+.TP 7
+.B EINVAL
+The value specified by \fImutex\fP does not refer to an initialized
+mutex object.
+.TP 7
+.B EAGAIN
+The mutex could not be acquired because the maximum number of recursive
+locks for \fImutex\fP has been exceeded.
+.sp
+.LP
+The \fIpthread_mutex_lock\fP() function may fail if:
+.TP 7
+.B EDEADLK
+The current thread already owns the mutex.
+.sp
+.LP
+The \fIpthread_mutex_unlock\fP() function may fail if:
+.TP 7
+.B EPERM
+The current thread does not own the mutex.
+.sp
+.LP
+These functions shall not return an error code of [EINTR].
+.LP
+\fIThe following sections are informative.\fP
+.SH EXAMPLES
+.LP
+None.
+.SH APPLICATION USAGE
+.LP
+None.
+.SH RATIONALE
+.LP
+Mutex objects are intended to serve as a low-level primitive from
+which other thread synchronization functions can be built. As
+such, the implementation of mutexes should be as efficient as possible,
+and this has ramifications on the features available at the
+interface.
+.LP
+The mutex functions and the particular default settings of the mutex
+attributes have been motivated by the desire to not
+preclude fast, inlined implementations of mutex locking and unlocking.
+.LP
+For example, deadlocking on a double-lock is explicitly allowed behavior
+in order to avoid requiring more overhead in the basic
+mechanism than is absolutely necessary. (More "friendly" mutexes that
+detect deadlock or that allow multiple locking by the same
+thread are easily constructed by the user via the other mechanisms
+provided. For example, \fIpthread_self\fP() can be used to record
+mutex ownership.) Implementations might also
+choose to provide such extended features as options via special mutex
+attributes.
+.LP
+Since most attributes only need to be checked when a thread is going
+to be blocked, the use of attributes does not slow the
+(common) mutex-locking case.
+.LP
+Likewise, while being able to extract the thread ID of the owner of
+a mutex might be desirable, it would require storing the
+current thread ID when each mutex is locked, and this could incur
+unacceptable levels of overhead. Similar arguments apply to a
+\fImutex_tryunlock\fP operation.
+.SH FUTURE DIRECTIONS
+.LP
+None.
+.SH SEE ALSO
+.LP
+\fIpthread_mutex_destroy\fP() , \fIpthread_mutex_timedlock\fP() ,
+the Base Definitions volume of
+IEEE\ Std\ 1003.1-2001, \fI<pthread.h>\fP
+.SH COPYRIGHT
+Portions of this text are reprinted and reproduced in electronic form
+from IEEE Std 1003.1, 2003 Edition, Standard for Information Technology
+-- Portable Operating System Interface (POSIX), The Open Group Base
+Specifications Issue 6, Copyright (C) 2001-2003 by the Institute of
+Electrical and Electronics Engineers, Inc and The Open Group. In the
+event of any discrepancy between this version and the original IEEE and
+The Open Group Standard, the original IEEE and The Open Group Standard
+is the referee document. The original Standard can be obtained online at
+http://www.opengroup.org/unix/online.html .