blob: 2118a23bb54cc0b946da945f871a4d065c6c9261 [file] [log] [blame]
.\" Copyright (c) 2008-2009 Apple Inc. All rights reserved.
.Dd May 1, 2009
.Dt dispatch_once 3
.Os Darwin
.Sh NAME
.Nm dispatch_once
.Nd execute a block only once
.Sh SYNOPSIS
.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
.Sh DESCRIPTION
The
.Fn dispatch_once
function provides a simple and efficient mechanism to run an initializer
exactly once, similar to
.Xr pthread_once 3 .
Well designed code hides the use of lazy initialization.
For example:
.Bd -literal
FILE *getlogfile(void)
{
static dispatch_once_t pred;
static FILE *logfile;
dispatch_once(&pred, ^{
logfile = fopen(MY_LOG_FILE, "a");
});
return logfile;
}
.Ed
.Pp
.Sh FUNDAMENTALS
The
.Fn dispatch_once
function is a wrapper around
.Fn dispatch_once_f .
.Sh SEE ALSO
.Xr dispatch 3