summaryrefslogtreecommitdiff
path: root/usr/src/man/man3c/call_once.3c
diff options
context:
space:
mode:
authorRobert Mustacchi <rm@joyent.com>2016-03-28 19:43:25 -0700
committerRobert Mustacchi <rm@joyent.com>2016-05-19 07:45:52 -0700
commitfc2512cfb727d49529d8ed99164db871f4829b73 (patch)
tree89ea56b5a9833e92795bf45c723c6de65b7490f2 /usr/src/man/man3c/call_once.3c
parentea4a67f462de0a39a9adea8197bcdef849de5371 (diff)
downloadillumos-gate-fc2512cfb727d49529d8ed99164db871f4829b73.tar.gz
6951 Initial c11 support
6952 gets should not be visible in C11 6953 add support for c11 threads api 6954 Symbols test should support validating pre-processor symbols Reviewed by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net> Reviewed by: Dan McDonald <danmcd@omniti.com> Reviewed by: Garrett D'Amore <garrett@damore.org> Approved by: Garrett D'Amore <garrett@damore.org>
Diffstat (limited to 'usr/src/man/man3c/call_once.3c')
-rw-r--r--usr/src/man/man3c/call_once.3c89
1 files changed, 89 insertions, 0 deletions
diff --git a/usr/src/man/man3c/call_once.3c b/usr/src/man/man3c/call_once.3c
new file mode 100644
index 0000000000..5cc1ba56a9
--- /dev/null
+++ b/usr/src/man/man3c/call_once.3c
@@ -0,0 +1,89 @@
+.\"
+.\" This file and its contents are supplied under the terms of the
+.\" Common Development and Distribution License ("CDDL"), version 1.0.
+.\" You may only use this file in accordance with the terms of version
+.\" 1.0 of the CDDL.
+.\"
+.\" A full copy of the text of the CDDL should have accompanied this
+.\" source. A copy of the CDDL is also available via the Internet at
+.\" http://www.illumos.org/license/CDDL.
+.\"
+.\"
+.\" Copyright 2016 Joyent, Inc.
+.\"
+.Dd "Jan 11, 2015"
+.Dt CALL_ONCE 3C
+.Os
+.Sh NAME
+.Nm call_once
+.Nd ensure function is only called once
+.Sh SYNOPSIS
+.In treads.h
+.Vt "once_flag once = ONCE_FLAG_INIT;"
+.Ft void
+.Fo call_once
+.Fa "once_flag *once"
+.Fa "void (*func)(void)"
+.Fc
+.Sh DESCRIPTION
+The
+.Fn call_once
+function is used to ensure that an operation occurs only once, even
+across multiple threads. Each instance of a properly initialized
+.Ft once_flag
+can be pased to the
+.Ft call_once
+function; however, only a single caller will successfully execute the
+specified function,
+.Fa func .
+This ensures that the argument
+.Fa func
+is called only once. Note, the argument
+.Fa once
+is the only thing used as a point of synchronization. If multiple
+callers use the same pointer for
+.Fa once ,
+but use different values for
+.Fa func ,
+then only one of the functions will be successfully called.
+.Pp
+The argument
+.Fn once
+should always be initialized to the symbol
+.Sy ONCE_FLAG_INIT
+before calling
+.Fn call_once .
+Failure to do so will result in undefined behavior.
+.Pp
+Like
+.Xr pthread_once 3C ,
+the
+.Fn call_once
+function is not itself a cancellation point; however, if the thread
+calling
+.Fn func
+encounters a cancellation point and is cancelled, then the value pointed
+to by
+.Fa once
+will be as though
+.Fn call_once
+had not been called, as
+.Fn func
+had not completed successfully.
+.Sh RETURN VALUES
+The
+.Fn call_once
+function does not return any values. Upon its completion, it is guaranteed that
+.Fa func
+will have been called at most once across the liftime of the
+.Fa once
+argument .
+.Sh INTERFACE STABILITY
+.Sy Standard
+.Sh MT-LEVEL
+.Sy MT-Safe
+.Sh SEE ALSO
+.Xr pthread_once 3C ,
+.Xr threads.h 3HEAD ,
+.Xr attributes 5 ,
+.Xr threads 5