NAME |LIBRARY |SYNOPSIS |DESCRIPTION |RETURN VALUE |ERRORS |STANDARDS |HISTORY |SEE ALSO |COLOPHON | |
FUTEX_TRYLOCK_PI(2const)FUTEX_TRYLOCK_PI(2const)FUTEX_TRYLOCK_PI - try to lock a priority-inheritance futex
Standard C library (libc,-lc)
#include <linux/futex.h>/* Definition ofFUTEX_*constants */#include <sys/syscall.h>/* Definition ofSYS_*constants */#include <unistd.h>long syscall(SYS_futex, uint32_t *uaddr, FUTEX_TRYLOCK_PI);
This operation tries to acquire the lock atuaddr. It is invoked when a user-space atomic acquire did not succeed because the futex word was not 0. Because the kernel has access to more state information than user space, acquisition of the lock might succeed if performed by the kernel in cases where the futex word (i.e., the state information accessible to use-space) contains stale state (FUTEX_WAITERS and/orFUTEX_OWNER_DIED). This can happen when the owner of the futex died. User space cannot handle this condition in a race- free manner, but the kernel can fix this up and acquire the futex.
On error, -1 is returned, anderrno is set to indicate the error. On success,FUTEX_TRYLOCK_PIReturns 0 if the futex was successfully locked.
Seefutex(2).EAGAINThe futex owner thread ID ofuaddr is about to exit, but has not yet handled the internal state cleanup. Try again.EDEADLK The futex word atuaddr is already locked by the caller.EINVALThe kernel detected an inconsistency between the user-space state atuaddr and the kernel state. This indicates either state corruption or that the kernel found a waiter onuaddr which is waiting viaFUTEX_WAIT(2const) orFUTEX_WAIT_BITSET(2const).ENOMEMThe kernel could not allocate memory to hold state information.ENOSYSA run-time check determined that the operation is not available. The PI-futex operations are not implemented on all architectures and are not supported on some CPU variants.EPERMThe caller is not allowed to attach itself to the futex atuaddr. (This may be caused by a state corruption in user space.)ESRCHThe thread ID in the futex word atuaddr does not exist.
Linux.
Linux 2.6.18.
futex(2)
This page is part of theman-pages (Linux kernel and C library user-space interface documentation) project. Information about the project can be found at ⟨https://www.kernel.org/doc/man-pages/⟩. If you have a bug report for this manual page, see ⟨https://git.kernel.org/pub/scm/docs/man-pages/man-pages.git/tree/CONTRIBUTING⟩. This page was obtained from the tarball man-pages-6.15.tar.gz fetched from ⟨https://mirrors.edge.kernel.org/pub/linux/docs/man-pages/⟩ on 2025-08-11. If you discover any rendering problems in this HTML version of the page, or you believe there is a better or more up- to-date source for the page, or you have corrections or improvements to the information in this COLOPHON (which isnot part of the original manual page), send a mail to man-pages@man7.orgLinux man-pages 6.15 2025-05-30FUTEX_TRYLOCK_PI(2const)Pages that refer to this page:futex(2)
Copyright and license for this manual page
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. | ![]() |