---
name: "dispatch_once"
section: "3"
platform: "macos"
package: "libdispatch"
version: "1542.100.32"
release: "macOS 26.5"
platforms: ["linux", "macos"]
url: "https://new.carta.tech/dispatch_once"
---

# dispatch\_once(3)

execute a block only once

## NAME

**dispatch\_once** – execute a block only once

## SYNOPSIS

**#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 \*)*);

## DESCRIPTION

The **dispatch\_once**() function provides a simple and efficient mechanism to run an initializer exactly once, similar to [pthread\_once(3)](/pthread_once/3.md). 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**().

## SEE ALSO

[dispatch(3)](/dispatch/3.md)
