Defined in header <threads.h> | ||
---|---|---|
void call_once( once_flag* flag, void (*func)(void) ); | (1) | (since C11) |
typedef /* unspecified */ once_flag | (2) | (since C11) |
#define ONCE_FLAG_INIT /* unspecified */ | (3) | (since C11) |
func
exactly once, even if invoked from several threads. The completion of the function func
synchronizes with all previous or subsequent calls to call_once
with the same flag
variable.call_once
once_flag
.flag | - | pointer to an object of type call_once that is used to ensure func is called only once |
func | - | the function to execute only once |
(none).
The POSIX equivalent of this function is pthread_once.
#include <stdio.h> #include <threads.h> void do_once(void) { puts("called once"); } static once_flag flag = ONCE_FLAG_INIT; int func(void* data) { call_once(&flag, do_once); } int main(void) { thrd_t t1, t2, t3, t4; thrd_create(&t1, func, NULL); thrd_create(&t2, func, NULL); thrd_create(&t3, func, NULL); thrd_create(&t4, func, NULL); thrd_join(t1, NULL); thrd_join(t2, NULL); thrd_join(t3, NULL); thrd_join(t4, NULL); }
Output:
called once
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
http://en.cppreference.com/w/c/thread/ONCE_FLAG_INIT