Updated: 2022/Sep/29
Please read Privacy Policy. It's for your privacy.
CALL_ONCE(3) Library Functions Manual CALL_ONCE(3) NAME call_once - calls function exactly once LIBRARY POSIX Threads Library (libpthread, -lpthread) SYNOPSIS #include <threads.h> void call_once(once_flag *flag, void (*func)(void)); #define ONCE_FLAG_INIT /* implementation specified */ DESCRIPTION The call_once function uses the flag parameter to ensure that func is called exactly once, even if called from several threads. The ONCE_FLAG_INIT definition expands to a value that can be used to initialize an object of type once_flag. This portable interface is implemented on top of the pthread_once(3) functionality. RETURN VALUES None. EXAMPLES The following calls call_once from two threads using the portable thrd(3) interface. #include <stdio.h> #include <threads.h> static once_flag oflag = ONCE_FLAG_INIT; void called_once(void) { printf("called once0); } int tfun(void *ptr) { call_once(&oflag, called_once); } int main(int argc, char **argv) { thrd_t th1, th2; thrd_create(&th1, tfun, NULL); thrd_create(&th2, tfun, NULL); thrd_join(th1, NULL); thrd_join(th2, NULL); return 0; } SEE ALSO pthread_once(3), threads(3) STANDARDS The call_once function conforms to ISO/IEC 9899:2011 ("ISO C11"). HISTORY This interface first appeared in NetBSD 9. AUTHORS Kamil Rytarowski <kamil@NetBSD.org> NetBSD 10.99 October 16, 2016 NetBSD 10.99