1 | <?xml version="1.0" encoding="utf-8"?> |
---|
2 | <!DOCTYPE library PUBLIC "-//Boost//DTD BoostBook XML V1.0//EN" |
---|
3 | "http://www.boost.org/tools/boostbook/dtd/boostbook.dtd" [ |
---|
4 | <!ENTITY % thread.entities SYSTEM "entities.xml"> |
---|
5 | %thread.entities; |
---|
6 | ]> |
---|
7 | <!-- Copyright (c) 2002-2003 William E. Kempf, Michael Glassford |
---|
8 | Subject to the Boost Software License, Version 1.0. |
---|
9 | (See accompanying file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0) |
---|
10 | --> |
---|
11 | <header name="boost/thread/once.hpp" |
---|
12 | last-revision="$Date: 2006/10/15 14:52:53 $"> |
---|
13 | <macro name="BOOST_ONCE_INIT"> |
---|
14 | <purpose>The <functionname>call_once</functionname> function and |
---|
15 | <code>once_flag</code> type (statically initialized to |
---|
16 | <macroname>BOOST_ONCE_INIT</macroname>) can be used to run a |
---|
17 | routine exactly once. This can be used to initialize data in a |
---|
18 | <link linkend="thread.glossary.thread-safe">thread-safe</link> |
---|
19 | manner.</purpose> |
---|
20 | |
---|
21 | <description>The implementation-defined macro |
---|
22 | <macroname>BOOST_ONCE_INIT</macroname> is a constant value used to |
---|
23 | initialize <code>once_flag</code> instances to indicate that the |
---|
24 | logically associated routine has not been run yet. See |
---|
25 | <functionname>call_once</functionname> for more details.</description> |
---|
26 | </macro> |
---|
27 | |
---|
28 | <namespace name="boost"> |
---|
29 | <typedef name="once_flag"> |
---|
30 | <purpose>The <functionname>call_once</functionname> function and |
---|
31 | <code>once_flag</code> type (statically initialized to |
---|
32 | <macroname>BOOST_ONCE_INIT</macroname>) can be used to run a |
---|
33 | routine exactly once. This can be used to initialize data in a |
---|
34 | <link linkend="thread.glossary.thread-safe">thread-safe</link> |
---|
35 | manner.</purpose> |
---|
36 | |
---|
37 | <description>The implementation-defined type <code>once_flag</code> |
---|
38 | is used as a flag to insure a routine is called only once. |
---|
39 | Instances of this type should be statically initialized to |
---|
40 | <macroname>BOOST_ONCE_INIT</macroname>. See |
---|
41 | <functionname>call_once</functionname> for more details. |
---|
42 | </description> |
---|
43 | |
---|
44 | <type><emphasis>implementation-defined</emphasis></type> |
---|
45 | </typedef> |
---|
46 | |
---|
47 | <function name="call_once"> |
---|
48 | <purpose>The <functionname>call_once</functionname> function and |
---|
49 | <code>once_flag</code> type (statically initialized to |
---|
50 | <macroname>BOOST_ONCE_INIT</macroname>) can be used to run a |
---|
51 | routine exactly once. This can be used to initialize data in a |
---|
52 | <link linkend="thread.glossary.thread-safe">thread-safe</link> |
---|
53 | manner.</purpose> |
---|
54 | |
---|
55 | <description> |
---|
56 | <para>Example usage is as follows:</para> |
---|
57 | <para> |
---|
58 | <programlisting>//Example usage: |
---|
59 | boost::once_flag once = BOOST_ONCE_INIT; |
---|
60 | |
---|
61 | void init() |
---|
62 | { |
---|
63 | //... |
---|
64 | } |
---|
65 | |
---|
66 | void thread_proc() |
---|
67 | { |
---|
68 | boost::call_once(&init, once); |
---|
69 | }</programlisting> |
---|
70 | </para></description> |
---|
71 | |
---|
72 | <parameter name="func"> |
---|
73 | <paramtype>void (*func)()</paramtype> |
---|
74 | </parameter> |
---|
75 | |
---|
76 | <parameter name="flag"> |
---|
77 | <paramtype>once_flag&</paramtype> |
---|
78 | </parameter> |
---|
79 | |
---|
80 | <requires>The function <code>func</code> shall not throw |
---|
81 | exceptions.</requires> |
---|
82 | |
---|
83 | <effects>As if (in an atomic fashion): |
---|
84 | <code>if (flag == BOOST_ONCE_INIT) func();</code></effects> |
---|
85 | |
---|
86 | <postconditions><code>flag != BOOST_ONCE_INIT</code> |
---|
87 | </postconditions> |
---|
88 | </function> |
---|
89 | </namespace> |
---|
90 | </header> |
---|