PTHREAD_ONCE(3) | Library Functions Manual | PTHREAD_ONCE(3)

# NAME

`pthread_once` —
dynamic package initialization

# LIBRARY

POSIX Threads Library (libpthread, -lpthread)

# SYNOPSIS

`#include <pthread.h>`

int
`pthread_once`(pthread_once_t *once_control, void (*init_routine)(void));

pthread_once_t once_control = `PTHREAD_ONCE_INIT`;

# DESCRIPTION

The first call to `pthread_once`() by any thread in a process, with a given once_control, will call the `init_routine`() with no arguments. Subsequent calls to `pthread_once`() with the same once_control will not call the `init_routine`() On return from `pthread_once`(), it is guaranteed that `init_routine`() has completed. The once_control parameter is used to determine whether the associated initialization routine has been called.

The function `pthread_once`() is not a cancellation point. However, if `init_routine`() is a cancellation point and is cancelled, the effect on once_control is as if `pthread_once`() was never called.

The constant `PTHREAD_ONCE_INIT` initializes the static once synchronization control structure once_control to be used with `pthread_once`(). The behavior of `pthread_once`() is undefined if once_control has automatic storage duration or is not initialized by `PTHREAD_ONCE_INIT`.

# RETURN VALUES

If successful, the `pthread_once`() function will return zero. Otherwise an error number will be returned to indicate the error.

# ERRORS

None.

# STANDARDS

The function conforms to IEEE Std 1003.1-2001 (“POSIX.1”).

July 9, 2010 | NetBSD 9.3