---
name: "FUTEX_TRYLOCK_PI"
section: "2const"
platform: "linux"
package: "man-pages"
version: "6.19-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/FUTEX_TRYLOCK_PI"
---

# FUTEX\_TRYLOCK\_PI(2const)

try to lock a priority-inheritance futex

## NAME

FUTEX\_TRYLOCK\_PI - try to lock a priority-inheritance futex

## LIBRARY

Standard C library (*libc*, *-lc*)

## SYNOPSIS

```
#include <linux/futex.h>  /* Definition of FUTEX_* constants */
#include <sys/syscall.h>  /* Definition of SYS_* constants */
#include <unistd.h>
```

**long syscall(SYS\_futex, uint32\_t \****uaddr***, FUTEX\_TRYLOCK\_PI);**

## DESCRIPTION

This operation tries to acquire the lock at *uaddr*. 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/or **FUTEX\_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.

## RETURN VALUE

On error, -1 is returned, and *errno* is set to indicate the error.

On success, **FUTEX\_TRYLOCK\_PI** Returns 0 if the futex was successfully locked.

## ERRORS

See [**futex**(2)](/futex/2.md).

- **EAGAIN**

  The futex owner thread ID of *uaddr* is about to exit, but has not yet handled the internal state cleanup. Try again.

- **EDEADLK**

  The futex word at *uaddr* is already locked by the caller.

- **EINVAL**

  The kernel detected an inconsistency between the user-space state at *uaddr* and the kernel state. This indicates either state corruption or that the kernel found a waiter on *uaddr* which is waiting via [**FUTEX\_WAIT**(2const)](/FUTEX_WAIT/2const.md) or [**FUTEX\_WAIT\_BITSET**(2const)](/FUTEX_WAIT_BITSET/2const.md).

- **ENOMEM**

  The kernel could not allocate memory to hold state information.

- **ENOSYS**

  A 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.

- **EPERM**

  The caller is not allowed to attach itself to the futex at *uaddr*. (This may be caused by a state corruption in user space.)

- **ESRCH**

  The thread ID in the futex word at *uaddr* does not exist.

## STANDARDS

Linux.

## HISTORY

Linux 2.6.18.

## SEE ALSO

[**futex**(2)](/futex/2.md)
