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 % threads.entities SYSTEM "entities.xml"> |
---|
5 | %threads.entities; |
---|
6 | ]> |
---|
7 | <header name="boost/thread/once.hpp" |
---|
8 | last-revision="$Date: 2004/07/17 04:33:59 $"> |
---|
9 | <macro name="BOOST_ONCE_INIT"> |
---|
10 | <purpose>The <functionname>call_once</functionname> function and |
---|
11 | <code>once_flag</code> type (statically initialized to |
---|
12 | <macroname>BOOST_ONCE_INIT</macroname>) can be used to run a |
---|
13 | routine exactly once. This can be used to initialize data in a |
---|
14 | <link linkend="threads.glossary.thread-safe">thread-safe</link> |
---|
15 | manner.</purpose> |
---|
16 | |
---|
17 | <description>The implementation-defined macro |
---|
18 | <macroname>BOOST_ONCE_INIT</macroname> is a constant value used to |
---|
19 | initialize <code>once_flag</code> instances to indicate that the |
---|
20 | logically associated routine has not been run yet. See |
---|
21 | <functionname>call_once</functionname> for more details.</description> |
---|
22 | </macro> |
---|
23 | |
---|
24 | <namespace name="boost"> |
---|
25 | <typedef name="once_flag"> |
---|
26 | <purpose>The <functionname>call_once</functionname> function and |
---|
27 | <code>once_flag</code> type (statically initialized to |
---|
28 | <macroname>BOOST_ONCE_INIT</macroname>) can be used to run a |
---|
29 | routine exactly once. This can be used to initialize data in a |
---|
30 | <link linkend="threads.glossary.thread-safe">thread-safe</link> |
---|
31 | manner.</purpose> |
---|
32 | |
---|
33 | <description>The implementation-defined type <code>once_flag</code> |
---|
34 | is used as a flag to insure a routine is called only once. |
---|
35 | Instances of this type should be statically initialized to |
---|
36 | <macroname>BOOST_ONCE_INIT</macroname>. See |
---|
37 | <functionname>call_once</functionname> for more details. |
---|
38 | </description> |
---|
39 | |
---|
40 | <type><emphasis>implementation-defined</emphasis></type> |
---|
41 | </typedef> |
---|
42 | |
---|
43 | <function name="call_once"> |
---|
44 | <purpose>The <functionname>call_once</functionname> function and |
---|
45 | <code>once_flag</code> type (statically initialized to |
---|
46 | <macroname>BOOST_ONCE_INIT</macroname>) can be used to run a |
---|
47 | routine exactly once. This can be used to initialize data in a |
---|
48 | <link linkend="threads.glossary.thread-safe">thread-safe</link> |
---|
49 | manner.</purpose> |
---|
50 | |
---|
51 | <description> |
---|
52 | <para>Example usage is as follows:</para> |
---|
53 | <para> |
---|
54 | <programlisting>//Example usage: |
---|
55 | boost::once_flag once = BOOST_ONCE_INIT; |
---|
56 | |
---|
57 | void init() |
---|
58 | { |
---|
59 | //... |
---|
60 | } |
---|
61 | |
---|
62 | void thread_proc() |
---|
63 | { |
---|
64 | boost::call_once(&init, once); |
---|
65 | }</programlisting> |
---|
66 | </para></description> |
---|
67 | |
---|
68 | <parameter name="func"> |
---|
69 | <paramtype>void (*func)()</paramtype> |
---|
70 | </parameter> |
---|
71 | |
---|
72 | <parameter name="flag"> |
---|
73 | <paramtype>once_flag&</paramtype> |
---|
74 | </parameter> |
---|
75 | |
---|
76 | <requires>The function <code>func</code> shall not throw |
---|
77 | exceptions.</requires> |
---|
78 | |
---|
79 | <effects>As if (in an atomic fashion): |
---|
80 | <code>if (flag == BOOST_ONCE_INIT) func();</code></effects> |
---|
81 | |
---|
82 | <postconditions><code>flag != BOOST_ONCE_INIT</code> |
---|
83 | </postconditions> |
---|
84 | </function> |
---|
85 | </namespace> |
---|
86 | </header> |
---|