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 is defined by header
.In pthread.h .
The behavior of pthread_once is undefined if once_control has automatic storage duration or is not initialized by PTHREAD_ONCE_INIT.
If successful, the pthread_once function will return zero. Otherwise an error number will be returned to indicate the error.
The pthread_once function conforms to -p1003.1-96.