pthread_barrier_wait(3)

pthread_barrier_wait3

Destroy, initialize or wait on a barrier object

Part of pthread_barrier_destroy(3).

Usage

#include <pthread.h>

int

pthread_barrier_destroy(pthread_barrier_t *barrier);

int

pthread_barrier_init(pthread_barrier_t *restrict barrier, const pthread_barrierattr_t *attr, unsigned count);

int

pthread_barrier_wait(pthread_barrier_t *barrier);

Library

POSIX Threads Library (libpthread, -lpthread)

Overview

The pthread_barrier_init() function will initialize barrier with attributes specified in attr, or if it is NULL, with default attributes. The number of threads that must call pthread_barrier_wait() before any of the waiting threads can be released is specified by count. The pthread_barrier_destroy() function will destroy barrier and release any resources that may have been allocated on its behalf.

The pthread_barrier_wait() function will synchronize calling threads at barrier. The threads will be blocked from making further progress until a sufficient number of threads calls this function. The number of threads that must call it before any of them will be released is determined by the count argument to pthread_barrier_init(). Once the threads have been released the barrier will be reset.

Implementation notes

In library “libthr” the PTHREAD_BARRIER_SERIAL_THREAD return value will always be returned by the last thread to reach the barrier.

Return values

If successful, both pthread_barrier_destroy() and pthread_barrier_init() will return zero. Otherwise, an error number will be returned to indicate the error. If the call to pthread_barrier_wait() is successful, all but one of the threads will return zero. That one thread will return PTHREAD_BARRIER_SERIAL_THREAD. Otherwise, an error number will be returned to indicate the error.

None of these functions will return EINTR.

Errors

The pthread_barrier_destroy() function will fail if:

[EBUSY]

An attempt was made to destroy barrier while it was in use.

The pthread_barrier_destroy() and pthread_barrier_wait() functions may fail if:

[EINVAL]

The value specified by barrier is invalid.

The pthread_barrier_init() function will fail if:

[EAGAIN]

The system lacks resources, other than memory, to initialize barrier.

[EINVAL]

The count argument is less than 1.

[ENOMEM]

Insufficient memory to initialize barrier.

Releases

52 releases since FreeBSD 5.3-RELEASE; the text changed 33 times.

  1. 5.3–5.5
  2. 6.0–6.3
  3. 6.4
  4. 7.0
  5. 7.1
  6. 7.2
  7. 7.3
  8. 7.4
  9. 8.0
  10. 8.1
  11. 8.2
  12. 8.3
  13. 8.4
  14. 9.0
  15. 9.1
  16. 9.2
  17. 9.3
  18. 10.0
  19. 10.1
  20. 10.2
  21. 10.3
  22. 10.4
  23. 11.0
  24. 11.1
  25. 11.2
  26. 11.3
  27. 11.4
  28. 12.0
  29. 12.1
  30. 12.2
  31. 12.3
  32. 12.4
  33. 13.0–13.2
  34. 13.3–16.0

History

The pthread_barrier_destroy(), pthread_barrier_init() and pthread_barrier_wait() functions first appeared in library “libkse” in FreeBSD 5.2, and in library “libthr” in FreeBSD 5.3.

From base 16.0-CURRENT-20261027-61c70dc16a79 in FreeBSD 16.0-CURRENT (2026-10-27). Parsed by carta from the page's mdoc source.