---
name: "FUTEX_UNLOCK_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_UNLOCK_PI"
---

# FUTEX\_UNLOCK\_PI(2const)

unlock a priority‐inheritance futex

## NAME

FUTEX\_UNLOCK\_PI - unlock 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\_UNLOCK\_PI);**

## DESCRIPTION

This operation wakes the top priority waiter that is waiting in [**FUTEX\_LOCK\_PI**(2const)](/FUTEX_LOCK_PI/2const.md) or [**FUTEX\_LOCK\_PI2**(2const)](/FUTEX_LOCK_PI2/2const.md) on the futex address provided by the *uaddr* argument.

This is called when the user-space value at *uaddr* cannot be changed atomically from a TID (of the owner) to 0.

## RETURN VALUE

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

On success, **FUTEX\_UNLOCK\_PI** returns 0 if the futex was successfully unlocked.

## ERRORS

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

- **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).

- **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 does not own the lock represented by the futex word.

## STANDARDS

Linux.

## HISTORY

Linux 2.6.18.

## SEE ALSO

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