---
name: "dispatch_once_f"
section: "3"
platform: "linux"
package: "libdispatch-dev"
version: "0~svn197-3.2"
release: "Debian 8 (Jessie)"
platforms: ["linux"]
url: "https://new.carta.tech/dispatch_once"
---

# dispatch\_once\_f(3)

execute a block only once

Part of [dispatch\_once(3)](/dispatch_once/3.md).

## 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;
}
```

## FUNDAMENTALS

The **dispatch\_once**() function is a wrapper around **dispatch\_once\_f**().

## SEE ALSO

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