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

# pthread\_cond\_wait(3)

wait on a condition variable

## NAME

**pthread\_cond\_wait** – wait on a condition variable

## LIBRARY

POSIX Threads Library (libpthread, -lpthread)

## SYNOPSIS

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

*int*\

**pthread\_cond\_wait**(*pthread\_cond\_t \*restrict cond*, *pthread\_mutex\_t \*restrict mutex*);

## DESCRIPTION

The **pthread\_cond\_wait**() function atomically blocks the current thread waiting on the condition variable specified by *cond*, and releases the mutex specified by *mutex*. The waiting thread unblocks after another thread calls [pthread\_cond\_signal(3)](/pthread_cond_signal/3.md), or [pthread\_cond\_broadcast(3)](/pthread_cond_broadcast/3.md) with the same condition variable, and the current thread reacquires the lock on *mutex*.

It is possible that the **pthread\_cond\_wait**() function returns without corresponding wakeup from either **pthread\_cond\_signal**() or **pthread\_cond\_broadcast**(). Such condition is called spurious wakeup, and is allowed by ISO/IEC 9945-1:1996 (“POSIX.1”). Applications should have a boolean expression used for each wait on the condition variable, and recheck it after return from the **pthread\_cond\_wait**() function.

## RETURN VALUES

If successful, the **pthread\_cond\_wait**() function will return zero. Otherwise an error number will be returned to indicate the error.

## ERRORS

The **pthread\_cond\_wait**() function will fail if:

- \[EINVAL\]

  The value specified by *cond* or the value specified by *mutex* is invalid.

- \[EPERM\]

  The specified *mutex* was not locked by the calling thread.

- \[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\_cond\_broadcast(3)](/pthread_cond_broadcast/3.md), [pthread\_cond\_destroy(3)](/pthread_cond_destroy/3.md), [pthread\_cond\_init(3)](/pthread_cond_init/3.md), [pthread\_cond\_signal(3)](/pthread_cond_signal/3.md), [pthread\_cond\_timedwait(3)](/pthread_cond_timedwait/3.md), [pthread\_mutex\_consistent(3)](/pthread_mutex_consistent/3.md)

## STANDARDS

The **pthread\_cond\_wait**() function conforms to ISO/IEC 9945-1:1996 (“POSIX.1”).
