dispatch_once(3)

dispatch_once3

Execute a block only once

Usage

#include <dispatch/dispatch.h>

void

dispatch_once(dispatch_once_t *predicate, void (^block)(void));

void

dispatch_once_f(dispatch_once_t *predicate, void *context, void (*function)(void *));

Overview

The dispatch_once() function provides a simple and efficient mechanism to run an initializer exactly once, similar to pthread_once(3). 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;
}

Scope of predicate

The variable of type dispatch_once_t must have global or static scope. The result of using this type with automatic or dynamic allocation is undefined.

Fundamentals

The dispatch_once() function is a wrapper around dispatch_once_f().

Releases

106 releases since Mac OS X 10.6; the text changed 3 times.

  1. 10.6–10.6.8
  2. 10.7–10.15.6
  3. 11.0.1–14.3
  4. 14.4–26.5

From libdispatch 1542.100.32 in macOS 26.5. Parsed by carta from the page's mdoc source.