---
name: "pthread_mutex_timedlock"
section: "3"
platform: "freebsd"
package: "base"
version: "16.0-CURRENT-20261027-61c70dc16a79"
release: "FreeBSD 16.0-CURRENT (2026-10-27)"
platforms: ["freebsd"]
url: "https://new.carta.tech/pthread_mutex_timedlock"
---

# pthread\_mutex\_timedlock(3)

lock a mutex without blocking indefinitely

## NAME

**pthread\_mutex\_timedlock** – lock a mutex without blocking indefinitely

## LIBRARY

POSIX Threads Library (libpthread, -lpthread)

## SYNOPSIS

**#include \<pthread.h\>**

**#include \<time.h\>**

*int*\

**pthread\_mutex\_timedlock**(*pthread\_mutex\_t \*restrict mutex*, *const struct timespec \*restrict abs\_timeout*);

## DESCRIPTION

The **pthread\_mutex\_timedlock**() function will lock *mutex*. If it is already locked the calling thread will block until the mutex becomes available or the timeout, specified by abs\_timeout, expires. The time of the timeout is an absolute time and is not relative to the current time.

## RETURN VALUES

If successful, **pthread\_mutex\_timedlock**() will return zero, otherwise an error number will be returned to indicate the error.

## ERRORS

The **pthread\_mutex\_timedlock**() function will fail if:

- \[Er ENOTRECOVERABLE\]

  The *mutex* 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.

- \[EINVAL\]

  The process or thread would have blocked, and *abs\_timeout* specified a nanosecond value less than zero or greater than or equal to 1 billion.

- \[EINVAL\]

  The *mutex* parameter is invalid.

- \[ETIMEDOUT\]

  The *mutex* could not be locked before the timeout expired.

- \[EAGAIN\]

  The *mutex* could not be acquired because the maximum number of recursive locks for the *mutex* has been exceeded.

- \[EDEADLK\]

  The current thread already owns the *mutex*.

- \[EOWNERDEAD\]

  The argument *mutex* points to a robust mutex and the process containing the previous owning thread terminated while holding the mutex lock. The lock was granted to the caller and it is up to the new owner to make the state consistent.

- \[ENOTRECOVERABLE\]

  The state protected by the *mutex* is not recoverable.

## SEE ALSO

[pthread\_mutex\_consistent(3)](/pthread_mutex_consistent/3.md), [pthread\_mutex\_destroy(3)](/pthread_mutex_destroy/3.md), [pthread\_mutex\_init(3)](/pthread_mutex_init/3.md), [pthread\_mutex\_lock(3)](/pthread_mutex_lock/3.md), [pthread\_mutex\_trylock(3)](/pthread_mutex_trylock/3.md), [pthread\_mutex\_unlock(3)](/pthread_mutex_unlock/3.md)

## STANDARDS

The **pthread\_mutex\_timedlock**() function is expected to conform to ISO/IEC 9945-1:1996 (“POSIX.1”).
