dispatch_once(3) execute a block only once


Fd #include <dispatch/dispatch.h> Ft void Fo dispatch_once Fa dispatch_once_t *predicate void (^block)(void) Fc Ft void Fo dispatch_once_f Fa dispatch_once_t *predicate void *context void (*function)(void *) Fc


The Fn dispatch_once function provides a simple and efficient mechanism to run an initializer exactly once, similar to pthread_once3. Well designed code hides the use of lazy initialization. For example:
FILE *getlogfile(void)
        static dispatch_once_t pred;
        static FILE *logfile;
        dispatch_once(&pred, ^{
                logfile = fopen(MY_LOG_FILE, "a");
        return logfile;


The Fn dispatch_once function is a wrapper around Fn dispatch_once_f .