File: a00122.html

package info (click to toggle)
tbb 2018~U6-4
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 19,920 kB
  • sloc: cpp: 131,295; ansic: 9,211; makefile: 1,343; asm: 1,061; python: 838; sh: 395; lisp: 198; objc: 176; pascal: 69
file content (231 lines) | stat: -rw-r--r-- 17,428 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
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.5"/>
<title>tbb::interface5::reader_writer_lock Class Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<!-- end header part -->
<!-- Generated by Doxygen 1.8.5 -->
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
      <li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
      <li><a href="modules.html"><span>Modules</span></a></li>
      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
      <li><a href="files.html"><span>Files</span></a></li>
    </ul>
  </div>
  <div id="navrow2" class="tabs2">
    <ul class="tablist">
      <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
      <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
      <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
    </ul>
  </div>
<div id="nav-path" class="navpath">
  <ul>
<li class="navelem"><a class="el" href="a00249.html">tbb</a></li><li class="navelem"><b>interface5</b></li><li class="navelem"><a class="el" href="a00122.html">reader_writer_lock</a></li>  </ul>
</div>
</div><!-- top -->
<div class="header">
  <div class="summary">
<a href="#nested-classes">Classes</a> &#124;
<a href="#pub-types">Public Types</a> &#124;
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="#friends">Friends</a> &#124;
<a href="a00390.html">List of all members</a>  </div>
  <div class="headertitle">
<div class="title">tbb::interface5::reader_writer_lock Class Reference<div class="ingroups"><a class="el" href="a00274.html">Synchronization</a></div></div>  </div>
</div><!--header-->
<div class="contents">

<p>Writer-preference reader-writer lock with local-only spinning on readers.  
 <a href="a00122.html#details">More...</a></p>

<p><code>#include &lt;reader_writer_lock.h&gt;</code></p>
<div class="dynheader">
Inheritance diagram for tbb::interface5::reader_writer_lock:</div>
<div class="dyncontent">
 <div class="center">
  <img src="a00122.png" usemap="#tbb::interface5::reader_writer_lock_map" alt=""/>
  <map id="tbb::interface5::reader_writer_lock_map" name="tbb::interface5::reader_writer_lock_map">
</map>
 </div></div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
Classes</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00143.html">scoped_lock</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">The scoped lock pattern for write locks.  <a href="a00143.html#details">More...</a><br/></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00152.html">scoped_lock_read</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">The scoped lock pattern for read locks.  <a href="a00152.html#details">More...</a><br/></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
Public Types</h2></td></tr>
<tr class="memitem:a29bbf9ca21c12b313d9fa5326feaf3ed"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00122.html#a29bbf9ca21c12b313d9fa5326feaf3ed">status_t</a> { <b>waiting_nonblocking</b>, 
<b>waiting</b>, 
<b>active</b>, 
<b>invalid</b>
 }</td></tr>
<tr class="memdesc:a29bbf9ca21c12b313d9fa5326feaf3ed"><td class="mdescLeft">&#160;</td><td class="mdescRight">Status type for nodes associated with lock instances.  <a href="a00122.html#a29bbf9ca21c12b313d9fa5326feaf3ed">More...</a><br/></td></tr>
<tr class="separator:a29bbf9ca21c12b313d9fa5326feaf3ed"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:abceda6c50b0c36eacbef51f4682742f3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abceda6c50b0c36eacbef51f4682742f3"></a>
&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00122.html#abceda6c50b0c36eacbef51f4682742f3">reader_writer_lock</a> ()</td></tr>
<tr class="memdesc:abceda6c50b0c36eacbef51f4682742f3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructs a new <a class="el" href="a00122.html" title="Writer-preference reader-writer lock with local-only spinning on readers. ">reader_writer_lock</a>. <br/></td></tr>
<tr class="separator:abceda6c50b0c36eacbef51f4682742f3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aeee96b648c7b5ff6126c8a2e13ec7241"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aeee96b648c7b5ff6126c8a2e13ec7241"></a>
&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00122.html#aeee96b648c7b5ff6126c8a2e13ec7241">~reader_writer_lock</a> ()</td></tr>
<tr class="memdesc:aeee96b648c7b5ff6126c8a2e13ec7241"><td class="mdescLeft">&#160;</td><td class="mdescRight">Destructs a <a class="el" href="a00122.html" title="Writer-preference reader-writer lock with local-only spinning on readers. ">reader_writer_lock</a> object. <br/></td></tr>
<tr class="separator:aeee96b648c7b5ff6126c8a2e13ec7241"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af92eb949fc491af8f7e350869ea0a0d1"><td class="memItemLeft" align="right" valign="top">void __TBB_EXPORTED_METHOD&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00122.html#af92eb949fc491af8f7e350869ea0a0d1">lock</a> ()</td></tr>
<tr class="memdesc:af92eb949fc491af8f7e350869ea0a0d1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Acquires the <a class="el" href="a00122.html" title="Writer-preference reader-writer lock with local-only spinning on readers. ">reader_writer_lock</a> for write.  <a href="#af92eb949fc491af8f7e350869ea0a0d1">More...</a><br/></td></tr>
<tr class="separator:af92eb949fc491af8f7e350869ea0a0d1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1739e842af52925a2d4a7e821b9b3b8d"><td class="memItemLeft" align="right" valign="top">bool __TBB_EXPORTED_METHOD&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00122.html#a1739e842af52925a2d4a7e821b9b3b8d">try_lock</a> ()</td></tr>
<tr class="memdesc:a1739e842af52925a2d4a7e821b9b3b8d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Tries to acquire the <a class="el" href="a00122.html" title="Writer-preference reader-writer lock with local-only spinning on readers. ">reader_writer_lock</a> for write.  <a href="#a1739e842af52925a2d4a7e821b9b3b8d">More...</a><br/></td></tr>
<tr class="separator:a1739e842af52925a2d4a7e821b9b3b8d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6fd4fcdf0e5c0425d1cc736d644f234f"><td class="memItemLeft" align="right" valign="top">void __TBB_EXPORTED_METHOD&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00122.html#a6fd4fcdf0e5c0425d1cc736d644f234f">lock_read</a> ()</td></tr>
<tr class="memdesc:a6fd4fcdf0e5c0425d1cc736d644f234f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Acquires the <a class="el" href="a00122.html" title="Writer-preference reader-writer lock with local-only spinning on readers. ">reader_writer_lock</a> for read.  <a href="#a6fd4fcdf0e5c0425d1cc736d644f234f">More...</a><br/></td></tr>
<tr class="separator:a6fd4fcdf0e5c0425d1cc736d644f234f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9c7aa04e00202c9a1197cb6d870cabb4"><td class="memItemLeft" align="right" valign="top">bool __TBB_EXPORTED_METHOD&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00122.html#a9c7aa04e00202c9a1197cb6d870cabb4">try_lock_read</a> ()</td></tr>
<tr class="memdesc:a9c7aa04e00202c9a1197cb6d870cabb4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Tries to acquire the <a class="el" href="a00122.html" title="Writer-preference reader-writer lock with local-only spinning on readers. ">reader_writer_lock</a> for read.  <a href="#a9c7aa04e00202c9a1197cb6d870cabb4">More...</a><br/></td></tr>
<tr class="separator:a9c7aa04e00202c9a1197cb6d870cabb4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4c55c4dbde63e950fdc843c9b01a174f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4c55c4dbde63e950fdc843c9b01a174f"></a>
void __TBB_EXPORTED_METHOD&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00122.html#a4c55c4dbde63e950fdc843c9b01a174f">unlock</a> ()</td></tr>
<tr class="memdesc:a4c55c4dbde63e950fdc843c9b01a174f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Releases the <a class="el" href="a00122.html" title="Writer-preference reader-writer lock with local-only spinning on readers. ">reader_writer_lock</a>. <br/></td></tr>
<tr class="separator:a4c55c4dbde63e950fdc843c9b01a174f"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
Friends</h2></td></tr>
<tr class="memitem:afcf922650b2fd9d76b7b939d8511bbd8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afcf922650b2fd9d76b7b939d8511bbd8"></a>
class&#160;</td><td class="memItemRight" valign="bottom"><b>scoped_lock</b></td></tr>
<tr class="separator:afcf922650b2fd9d76b7b939d8511bbd8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a578ccbc6ecbc6d32cb45ccfdc0ed4ee6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a578ccbc6ecbc6d32cb45ccfdc0ed4ee6"></a>
class&#160;</td><td class="memItemRight" valign="bottom"><b>scoped_lock_read</b></td></tr>
<tr class="separator:a578ccbc6ecbc6d32cb45ccfdc0ed4ee6"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Writer-preference reader-writer lock with local-only spinning on readers. </p>
<p>Loosely adapted from Mellor-Crummey and Scott pseudocode at <a href="http://www.cs.rochester.edu/research/synchronization/pseudocode/rw.html#s_wp">http://www.cs.rochester.edu/research/synchronization/pseudocode/rw.html#s_wp</a> </p>
</div><h2 class="groupheader">Member Enumeration Documentation</h2>
<a class="anchor" id="a29bbf9ca21c12b313d9fa5326feaf3ed"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">enum <a class="el" href="a00122.html#a29bbf9ca21c12b313d9fa5326feaf3ed">tbb::interface5::reader_writer_lock::status_t</a></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Status type for nodes associated with lock instances. </p>
<p>waiting_nonblocking: the wait state for nonblocking lock instances; for writes, these transition straight to active states; for reads, these are unused.</p>
<p>waiting: the start and spin state for all lock instances; these will transition to active state when appropriate. Non-blocking write locks transition from this state to waiting_nonblocking immediately.</p>
<p>active: the active state means that the lock instance holds the lock; it will transition to invalid state during node deletion</p>
<p>invalid: the end state for all nodes; this is set in the destructor so if we encounter this state, we are looking at memory that has already been freed</p>
<p>The state diagrams below describe the status transitions. Single arrows indicate that the thread that owns the node is responsible for the transition; double arrows indicate that any thread could make the transition.</p>
<p>State diagram for <a class="el" href="a00143.html" title="The scoped lock pattern for write locks. ">scoped_lock</a> status:</p>
<p>waiting -------&mdash;&gt; waiting_nonblocking | _____________/ | V V V active --------------&mdash;&gt; invalid</p>
<p>State diagram for <a class="el" href="a00152.html" title="The scoped lock pattern for read locks. ">scoped_lock_read</a> status:</p>
<p>waiting | V active --------------&mdash;&gt;invalid </p>

</div>
</div>
<h2 class="groupheader">Member Function Documentation</h2>
<a class="anchor" id="af92eb949fc491af8f7e350869ea0a0d1"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void __TBB_EXPORTED_METHOD tbb::interface5::reader_writer_lock::lock </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Acquires the <a class="el" href="a00122.html" title="Writer-preference reader-writer lock with local-only spinning on readers. ">reader_writer_lock</a> for write. </p>
<p>If the lock is currently held in write mode by another context, the writer will block by spinning on a local variable. Exceptions thrown: <a class="el" href="a00086.html" title="Exception for PPL locks. ">improper_lock</a> The context tries to acquire a <a class="el" href="a00122.html" title="Writer-preference reader-writer lock with local-only spinning on readers. ">reader_writer_lock</a> that it already has write ownership of. </p>

</div>
</div>
<a class="anchor" id="a6fd4fcdf0e5c0425d1cc736d644f234f"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void __TBB_EXPORTED_METHOD tbb::interface5::reader_writer_lock::lock_read </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Acquires the <a class="el" href="a00122.html" title="Writer-preference reader-writer lock with local-only spinning on readers. ">reader_writer_lock</a> for read. </p>
<p>If the lock is currently held by a writer, this reader will block and wait until the writers are done. Exceptions thrown: <a class="el" href="a00086.html" title="Exception for PPL locks. ">improper_lock</a> The context tries to acquire a <a class="el" href="a00122.html" title="Writer-preference reader-writer lock with local-only spinning on readers. ">reader_writer_lock</a> that it already has write ownership of. </p>

</div>
</div>
<a class="anchor" id="a1739e842af52925a2d4a7e821b9b3b8d"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">bool __TBB_EXPORTED_METHOD tbb::interface5::reader_writer_lock::try_lock </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Tries to acquire the <a class="el" href="a00122.html" title="Writer-preference reader-writer lock with local-only spinning on readers. ">reader_writer_lock</a> for write. </p>
<p>This function does not block. Return Value: True or false, depending on whether the lock is acquired or not. If the lock is already held by this acquiring context, <a class="el" href="a00122.html#a1739e842af52925a2d4a7e821b9b3b8d" title="Tries to acquire the reader_writer_lock for write. ">try_lock()</a> returns false. </p>

</div>
</div>
<a class="anchor" id="a9c7aa04e00202c9a1197cb6d870cabb4"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">bool __TBB_EXPORTED_METHOD tbb::interface5::reader_writer_lock::try_lock_read </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Tries to acquire the <a class="el" href="a00122.html" title="Writer-preference reader-writer lock with local-only spinning on readers. ">reader_writer_lock</a> for read. </p>
<p>This function does not block. Return Value: True or false, depending on whether the lock is acquired or not. </p>

</div>
</div>
<hr/>The documentation for this class was generated from the following file:<ul>
<li>reader_writer_lock.h</li>
</ul>
</div><!-- contents -->
<hr>
<p></p>
Copyright &copy; 2005-2018 Intel Corporation.  All Rights Reserved.
<p></p>
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
subsidiaries in the United States and other countries.
<p></p>
* Other names and brands may be claimed as the property of others.