File: c_11_synchronization.htm

package info (click to toggle)
tbb 4.2~20140122-5
  • links: PTS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 21,492 kB
  • ctags: 21,278
  • sloc: cpp: 92,813; ansic: 9,775; asm: 1,070; makefile: 1,057; sh: 351; java: 226; objc: 98; pascal: 71; xml: 41
file content (150 lines) | stat: -rwxr-xr-x 8,151 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
<!DOCTYPE html
  PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- saved from url=(0014)about:internet -->
<html xmlns:MSHelp="http://www.microsoft.com/MSHelp/" lang="en-us" xml:lang="en-us"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<meta name="DC.Type" content="reference">
<meta name="DC.Title" content="C++11 Synchronization">
<meta name="DC.subject" content="C++11 Synchronization">
<meta name="keywords" content="C++11 Synchronization">
<meta name="DC.Relation" scheme="URI" content="../../reference/synchronization.htm">
<meta name="DC.Relation" scheme="URI" content="../general_conventions/namespaces.htm">
<meta name="DC.Format" content="XHTML">
<meta name="DC.Identifier" content="c_11_synchronization">
<meta name="DC.Language" content="en-US">
<link rel="stylesheet" type="text/css" href="../../intel_css_styles.css">
<title>C++11 Synchronization</title>
</head>
<body id="c_11_synchronization">
 <!-- ==============(Start:NavScript)================= -->
 <script src="..\..\NavScript.js" language="JavaScript1.2" type="text/javascript"></script>
 <script language="JavaScript1.2" type="text/javascript">WriteNavLink(2);</script>
 <!-- ==============(End:NavScript)================= -->
<a name="c_11_synchronization"><!-- --></a>


    <h1 class="topictitle1">C++11  Synchronization</h1>

    
<div><div class="section"><p>The Intel&reg; Threading Building Blocks (Intel&reg; TBB) library 
approximates a portion of C++11 interfaces for condition variables and scoped locking. The approximation is based on the C++11 working draft N3000. The major differences are:</p>

        <ul type="disc">
            <li><p>The implementation uses the <samp class="codeph">tbb::tick_count</samp> interface instead of the C++11 &lt;chrono&gt; interface. </p>
</li>

            <li><p>The implementation throws <samp class="codeph">std::runtime_error </samp>instead of a C++11 std::system_error.</p>
</li>

            <li><p>The implementation omits or approximates features requiring C++11 language support such as <samp class="codeph">constexpr</samp> or <samp class="codeph">explicit</samp> operators.</p>
</li>

            <li><p>The implementation works in conjunction with tbb::mutex wherever the C++11 specification calls for a <samp class="codeph">std::mutex</samp>. </p>
</li>

        </ul>

        <p>See the working draft N3000 for a detailed descriptions of the members.</p>

        <div class="Note"><h3 class="NoteTipHead">
					Caution</h3><p>Implementations may change if the C++11 specification changes. </p>
</div>
        <div class="Note"><h3 class="NoteTipHead">
					Caution</h3><p>When support for <samp class="codeph">std::system_error</samp> becomes available, implementations may throw <samp class="codeph">std::system_error</samp> instead of <samp class="codeph">std::runtime_error</samp>.</p>
</div>
        <p>The library defines the C++11 interfaces in namespace std, not namespace tbb, as explained in Section std Namespace.</p>

        </div>
<div class="section"><h2 class="sectiontitle">Header</h2>
        <pre>#include "tbb/compat/condition_variable"</pre>
        </div>
<div class="section"><h2 class="sectiontitle">Members</h2>
<pre>namespace std {
    &nbsp;&nbsp;&nbsp; struct defer_lock_t { }; 
    &nbsp;&nbsp;&nbsp; struct try_to_lock_t { }; 
    &nbsp;&nbsp;&nbsp; struct adopt_lock_t { }; 
    &nbsp;&nbsp;&nbsp; const defer_lock_t defer_lock = {};
    &nbsp;&nbsp;&nbsp; const try_to_lock_t try_to_lock = {};
    &nbsp;&nbsp;&nbsp; const adopt_lock_t adopt_lock = {};
    &nbsp;
    &nbsp;&nbsp;&nbsp; template&lt;typename M&gt;
    &nbsp;&nbsp;&nbsp; class lock_guard {
    &nbsp;&nbsp;&nbsp; public:
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; typedef M mutex_type;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; explicit lock_guard(mutex_type&amp; m);
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lock_guard(mutex_type&amp; m, adopt_lock_t);
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ~lock_guard();
    &nbsp;&nbsp;&nbsp; };
    &nbsp;
    &nbsp;&nbsp;&nbsp; template&lt;typename M&gt;
    &nbsp;&nbsp;&nbsp; class unique_lock: no_copy {
    &nbsp;&nbsp;&nbsp; public:
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; typedef M mutex_type;
    &nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unique_lock();
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; explicit unique_lock(mutex_type&amp; m);
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unique_lock(mutex_type&amp; m, defer_lock_t);
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unique_lock(mutex_type&amp; m, try_to_lock_t));
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unique_lock(mutex_type&amp; m, adopt_lock_t);
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unique_lock(mutex_type&amp; m, const tick_count::interval_t &amp;i);
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ~unique_lock();
    &nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void lock();
    &nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bool try_lock();
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bool try_lock_for( const tick_count::interval_t &amp;i );
    &nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void unlock();
    &nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void swap(unique_lock&amp; u);
    &nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mutex_type* release();
    &nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bool owns_lock() const;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; operator bool() const;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mutex_type* mutex() const;
    &nbsp;&nbsp;&nbsp; };
    &nbsp;
    &nbsp;&nbsp;&nbsp; template&lt;typename M&gt;
    &nbsp;&nbsp;&nbsp; void swap(unique_lock&lt;M&gt;&amp; x, unique_lock&lt;M&gt;&amp; y);
    &nbsp;
    &nbsp;&nbsp;&nbsp; enum cv_status {no_timeout, timeout};
    &nbsp;
    &nbsp;&nbsp;&nbsp; class condition_variable : no_copy {
    &nbsp;&nbsp;&nbsp; public:
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; condition_variable();
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ~condition_variable();
    &nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void notify_one();
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void notify_all();
    &nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void wait(unique_lock&lt;mutex&gt;&amp; lock);
    &nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; template &lt;class Predicate&gt;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void wait(unique_lock&lt;mutex&gt;&amp; lock, Predicate pred);
    &nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cv_status wait_for(unique_lock&lt;mutex&gt;&amp; lock, 
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const tick_count::interval_t&amp; i);
    &nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; template&lt;typename Predicate&gt;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bool wait_for(unique_lock&lt;mutex&gt;&amp; lock, 
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const tick_count::interval_t &amp;i, 
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Predicate pred);
    &nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; typedef <em>implementation-defined</em> native_handle_type;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; native_handle_type native_handle();
    &nbsp;&nbsp;&nbsp; };
    } // namespace std
    &nbsp;</pre></div>
</div>
 
<div class="familylinks">
<div class="parentlink"><strong>Parent topic:</strong>&nbsp;<a href="../../reference/synchronization.htm">Synchronization</a></div>
</div>
<div class="See Also">
<h2>See Also</h2>
<div class="linklist">
<div><a href="../general_conventions/namespaces.htm">Namespace std</a></div></div>
</div>
</body>
</html>