| CALL_ONCE(3) | Library Functions Manual | CALL_ONCE(3) | 
call_once —
#include <threads.h>
void
  
  call_once(once_flag
    *flag, void
    (*func)(void));
#define ONCE_FLAG_INIT /* implementation specified */
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.
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;
}
call_once function conforms to
  ISO/IEC 9899:2011 (“ISO C11”).
| October 16, 2016 | NetBSD 10.0 |