pthread_once(3pthread)


pthread_once -- dynamic package initialization

Synopsis

   cc [options] -Kthread file
   

#include <pthread.h>

int pthread_once(pthread_once_t *once_control, void (*init_routine) (void)); pthread_once_t once_control = PTHREAD_ONCE_INIT;

Description

pthread_once performs dynamic library initialization in a multithreaded process, thus aiding in the reliable construction of multithreaded and realtime systems. The first call to pthread_once by any thread in a process, with a given once_control, will call init_routine with no arguments. Subsequent calls of pthread_once with the same once_control will not call 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 the calling thread is canceled in init_routine, the effect on once_control is as if pthread_once was never called.

The macro PTHREAD_ONCE_INIT is defined in the header <pthread.h>.

The behavior of pthread_once is undefined if once_control is not initialized by PTHREAD_ONCE_INIT.

The once_control parameter is a pointer to a value that indicates whether init_routine has been called. init_routine is a pointer to a library-exported initialization routine.

Return values

pthread_once returns zero on success. Otherwise, an error number is returned and no signal is sent.

Diagnostics

pthread_once returns the following value if the corresponding condition is detected:

EINVAL
once_control is not a valid argument.

Standards Compliance

The Single UNIX Specification, Version 2; The Open Group.

References

Intro(3pthread), pthread(4)
© 2004 The SCO Group, Inc. All rights reserved.
UnixWare 7 Release 7.1.4 - 25 April 2004