Movatterモバイル変換


[0]ホーム

URL:


man7.org > Linux >man-pages

Linux/UNIX system programming training


pthread_mutex_lock(3p) — Linux manual page

PROLOG |NAME |SYNOPSIS |DESCRIPTION |RETURN VALUE |ERRORS |EXAMPLES |APPLICATION USAGE |RATIONALE |FUTURE DIRECTIONS |SEE ALSO |COPYRIGHT

PTHREAD_MUTEX_LOCK(3P)  POSIX Programmer's ManualPTHREAD_MUTEX_LOCK(3P)

PROLOG        top

       This manual page is part of the POSIX Programmer's Manual.  The       Linux implementation of this interface may differ (consult the       corresponding Linux manual page for details of Linux behavior), or       the interface may not be implemented on Linux.

NAME        top

       pthread_mutex_lock, pthread_mutex_trylock, pthread_mutex_unlock —       lock and unlock a mutex

SYNOPSIS        top

       #include <pthread.h>       int pthread_mutex_lock(pthread_mutex_t *mutex);       int pthread_mutex_trylock(pthread_mutex_t *mutex);       int pthread_mutex_unlock(pthread_mutex_t *mutex);

DESCRIPTION        top

       The mutex object referenced bymutex shall be locked by a call topthread_mutex_lock() that returns zero or[EOWNERDEAD].  If the       mutex is already locked by another thread, the calling thread       shall block until the mutex becomes available. This operation       shall return with the mutex object referenced bymutex in the       locked state with the calling thread as its owner. If a thread       attempts to relock a mutex that it has already locked,pthread_mutex_lock() shall behave as described in theRelock       column of the following table. If a thread attempts to unlock a       mutex that it has not locked or a mutex which is unlocked,pthread_mutex_unlock() shall behave as described in theUnlockWhen Not Ownercolumn of the following table.      ┌────────────┬────────────┬────────────────┬───────────────────────┐      │Mutex TypeRobustnessRelockUnlock When Not Owner│      ├────────────┼────────────┼────────────────┼───────────────────────┤      │ NORMAL     │ non-robust │ deadlock       │ undefined behavior    │      ├────────────┼────────────┼────────────────┼───────────────────────┤      │ NORMAL     │ robust     │ deadlock       │ error returned        │      ├────────────┼────────────┼────────────────┼───────────────────────┤      │ ERRORCHECK │ either     │ error returned │ error returned        │      ├────────────┼────────────┼────────────────┼───────────────────────┤      │ RECURSIVE  │ either     │ recursive      │ error returned        │      │            │            │ (see below)    │                       │      ├────────────┼────────────┼────────────────┼───────────────────────┤      │ DEFAULT    │ non-robust │ undefined      │ undefined behavior†   │      │            │            │ behavior†      │                       │      ├────────────┼────────────┼────────────────┼───────────────────────┤      │ DEFAULT    │ robust     │ undefined      │ error returned        │      │            │            │ behavior†      │                       │      └────────────┴────────────┴────────────────┴───────────────────────┘       †     If the mutex type is PTHREAD_MUTEX_DEFAULT, the behavior ofpthread_mutex_lock() may correspond to one of the three             other standard mutex types as described in the table above.             If it does not correspond to one of those three, the             behavior is undefined for the cases marked †.       Where the table indicates recursive behavior, 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.       Thepthread_mutex_trylock() function shall be equivalent topthread_mutex_lock(), except that if the mutex object referenced       bymutex 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 thepthread_mutex_trylock() function shall immediately return       success.       Thepthread_mutex_unlock() function shall release the mutex object       referenced bymutex.  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 bymutex whenpthread_mutex_unlock() is called, resulting in the mutex becoming       available, the scheduling policy shall determine which thread       shall acquire the mutex.       (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.)       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.       Ifmutex is a robust mutex and the process containing the owning       thread terminated while holding the mutex lock, a call topthread_mutex_lock() shall return the error value[EOWNERDEAD].       Ifmutex is a robust mutex and the owning thread terminated while       holding the mutex lock, a call topthread_mutex_lock() may return       the error value[EOWNERDEAD]even if the process in which the       owning thread resides has not terminated. In these cases, the       mutex is locked by the thread but the state it protects is marked       as inconsistent. The application should ensure that the state is       made consistent for reuse and when that is complete callpthread_mutex_consistent().  If the application is unable to       recover the state, it should unlock the mutex without a prior call       topthread_mutex_consistent(), after which the mutex is marked       permanently unusable.       Ifmutex does not refer to an initialized mutex object, the       behavior ofpthread_mutex_lock(),pthread_mutex_trylock(), andpthread_mutex_unlock() is undefined.

RETURN VALUE        top

       If successful, thepthread_mutex_lock(),pthread_mutex_trylock(),       andpthread_mutex_unlock() functions shall return zero; otherwise,       an error number shall be returned to indicate the error.

ERRORS        top

       Thepthread_mutex_lock() andpthread_mutex_trylock() functions       shall fail if:EAGAINThe mutex could not be acquired because the maximum number              of recursive locks formutex has been exceeded.EINVALThemutex 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.ENOTRECOVERABLE              The state protected by the mutex is not recoverable.EOWNERDEAD              The mutex is a robust mutex and the process containing the              previous owning thread terminated while holding the mutex              lock. The mutex lock shall be acquired by the calling              thread and it is up to the new owner to make the state              consistent.       Thepthread_mutex_lock() function shall fail if:EDEADLK              The mutex type is PTHREAD_MUTEX_ERRORCHECK and the current              thread already owns the mutex.       Thepthread_mutex_trylock() function shall fail if:EBUSYThemutex could not be acquired because it was already              locked.       Thepthread_mutex_unlock() function shall fail if:EPERMThe mutex type is PTHREAD_MUTEX_ERRORCHECK or              PTHREAD_MUTEX_RECURSIVE, or the mutex is a robust mutex,              and the current thread does not own the mutex.       Thepthread_mutex_lock() andpthread_mutex_trylock() functions may       fail if:EOWNERDEAD              The mutex is a robust mutex and the previous owning thread              terminated while holding the mutex lock. The mutex lock              shall be acquired by the calling thread and it is up to the              new owner to make the state consistent.       Thepthread_mutex_lock() function may fail if:EDEADLK              A deadlock condition was detected.       These functions shall not return an error code of[EINTR].The following sections are informative.

EXAMPLES        top

       None.

APPLICATION USAGE        top

       Applications that have assumed that non-zero return values are       errors will need updating for use with robust mutexes, since a       valid return for a thread acquiring a mutex which is protecting a       currently inconsistent state is[EOWNERDEAD].  Applications that       do not check the error returns, due to ruling out the possibility       of such errors arising, should not use robust mutexes. If an       application is supposed to work with normal and robust mutexes it       should check all return values for error conditions and if       necessary take appropriate action.

RATIONALE        top

       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.       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.       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.       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 amutex_tryunlock operation.       For further rationale on the extended mutex types, see the       Rationale (Informative) volume of POSIX.1‐2017,ThreadsExtensions.       If an implementation detects that the value specified by themutex       argument does not refer to an initialized mutex object, it is       recommended that the function should fail and report an[EINVAL]       error.

FUTURE DIRECTIONS        top

       None.

SEE ALSO        top

pthread_mutex_consistent(3p),pthread_mutex_destroy(3p),pthread_mutex_timedlock(3p),pthread_mutexattr_getrobust(3p)       The  Base Definitions volume of POSIX.1‐2017,Section 4.12,MemorySynchronization,pthread.h(0p)

COPYRIGHT        top

       Portions of this text are reprinted and reproduced  in  electronic       form   from   IEEE   Std  1003.1-2017,  Standard  for  Information       Technology -- Portable Operating  System  Interface  (POSIX),  The       Open  Group  Base  Specifications Issue 7, 2018 Edition, Copyright       (C) 2018 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  athttp://www.opengroup.org/unix/online.html .       Any typographical or formatting errors that appear  in  this  page       are  most  likely to have been introduced during the conversion of       the source files to man page format. To report  such  errors,  seehttps://www.kernel.org/doc/man-pages/reporting_bugs.html .IEEE/The Open Group                2017PTHREAD_MUTEX_LOCK(3P)

Pages that refer to this page:pthread.h(0p)pthread_mutexattr_getrobust(3p)pthread_mutexattr_gettype(3p)pthread_mutex_consistent(3p)pthread_mutex_destroy(3p)pthread_mutex_getprioceiling(3p)pthread_mutex_timedlock(3p)pthread_mutex_trylock(3p)



HTML rendering created 2025-09-06 byMichael Kerrisk, author ofThe Linux Programming Interface.

For details of in-depthLinux/UNIX system programming training courses that I teach, lookhere.

Hosting byjambit GmbH.

Cover of TLPI


[8]ページ先頭

©2009-2025 Movatter.jp