This file is indexed.

/usr/share/doc/libbackport-util-concurrent-java/api/edu/emory/mathcs/backport/java/util/concurrent/locks/ReadWriteLock.html is in libbackport-util-concurrent-java-doc 3.1-3build1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  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
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (version 1.7.0_03) on Fri May 18 11:21:08 UTC 2012 -->
<title>ReadWriteLock</title>
<meta name="date" content="2012-05-18">
<link rel="stylesheet" type="text/css" href="../../../../../../../../stylesheet.css" title="Style">
</head>
<body>
<script type="text/javascript"><!--
    if (location.href.indexOf('is-external=true') == -1) {
        parent.document.title="ReadWriteLock";
    }
//-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar_top">
<!--   -->
</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
<!--   -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../../../../../edu/emory/mathcs/backport/java/util/concurrent/locks/Lock.html" title="interface in edu.emory.mathcs.backport.java.util.concurrent.locks"><span class="strong">Prev Class</span></a></li>
<li><a href="../../../../../../../../edu/emory/mathcs/backport/java/util/concurrent/locks/ReentrantLock.html" title="class in edu.emory.mathcs.backport.java.util.concurrent.locks"><span class="strong">Next Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../../../../index.html?edu/emory/mathcs/backport/java/util/concurrent/locks/ReadWriteLock.html" target="_top">Frames</a></li>
<li><a href="ReadWriteLock.html" target="_top">No Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../../../../../../allclasses-noframe.html">All Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
  allClassesLink = document.getElementById("allclasses_navbar_top");
  if(window==top) {
    allClassesLink.style.display = "block";
  }
  else {
    allClassesLink.style.display = "none";
  }
  //-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method_summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method_detail">Method</a></li>
</ul>
</div>
<a name="skip-navbar_top">
<!--   -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="subTitle">edu.emory.mathcs.backport.java.util.concurrent.locks</div>
<h2 title="Interface ReadWriteLock" class="title">Interface ReadWriteLock</h2>
</div>
<div class="contentContainer">
<div class="description">
<ul class="blockList">
<li class="blockList">
<dl>
<dt>All Known Implementing Classes:</dt>
<dd><a href="../../../../../../../../edu/emory/mathcs/backport/java/util/concurrent/locks/ReentrantReadWriteLock.html" title="class in edu.emory.mathcs.backport.java.util.concurrent.locks">ReentrantReadWriteLock</a></dd>
</dl>
<hr>
<br>
<pre>public interface <span class="strong">ReadWriteLock</span></pre>
<div class="block">A <tt>ReadWriteLock</tt> maintains a pair of associated <a href="../../../../../../../../edu/emory/mathcs/backport/java/util/concurrent/locks/Lock.html" title="interface in edu.emory.mathcs.backport.java.util.concurrent.locks"><code>locks</code></a>, one for read-only operations and one for writing.
 The <a href="../../../../../../../../edu/emory/mathcs/backport/java/util/concurrent/locks/ReadWriteLock.html#readLock()"><code>read lock</code></a> may be held simultaneously by
 multiple reader threads, so long as there are no writers.  The
 <a href="../../../../../../../../edu/emory/mathcs/backport/java/util/concurrent/locks/ReadWriteLock.html#writeLock()"><code>write lock</code></a> is exclusive.

 <p>All <tt>ReadWriteLock</tt> implementations must guarantee that
 the memory synchronization effects of <tt>writeLock</tt> operations
 (as specified in the <a href="../../../../../../../../edu/emory/mathcs/backport/java/util/concurrent/locks/Lock.html" title="interface in edu.emory.mathcs.backport.java.util.concurrent.locks"><code>Lock</code></a> interface) also hold with respect
 to the associated <tt>readLock</tt>. That is, a thread successfully
 acquiring the read lock will see all updates made upon previous
 release of the write lock.

 <p>A read-write lock allows for a greater level of concurrency in
 accessing shared data than that permitted by a mutual exclusion lock.
 It exploits the fact that while only a single thread at a time (a
 <em>writer</em> thread) can modify the shared data, in many cases any
 number of threads can concurrently read the data (hence <em>reader</em>
 threads).
 In theory, the increase in concurrency permitted by the use of a read-write
 lock will lead to performance improvements over the use of a mutual
 exclusion lock. In practice this increase in concurrency will only be fully
 realized on a multi-processor, and then only if the access patterns for
 the shared data are suitable.

 <p>Whether or not a read-write lock will improve performance over the use
 of a mutual exclusion lock depends on the frequency that the data is
 read compared to being modified, the duration of the read and write
 operations, and the contention for the data - that is, the number of
 threads that will try to read or write the data at the same time.
 For example, a collection that is initially populated with data and
 thereafter infrequently modified, while being frequently searched
 (such as a directory of some kind) is an ideal candidate for the use of
 a read-write lock. However, if updates become frequent then the data
 spends most of its time being exclusively locked and there is little, if any
 increase in concurrency. Further, if the read operations are too short
 the overhead of the read-write lock implementation (which is inherently
 more complex than a mutual exclusion lock) can dominate the execution
 cost, particularly as many read-write lock implementations still serialize
 all threads through a small section of code. Ultimately, only profiling
 and measurement will establish whether the use of a read-write lock is
 suitable for your application.


 <p>Although the basic operation of a read-write lock is straight-forward,
 there are many policy decisions that an implementation must make, which
 may affect the effectiveness of the read-write lock in a given application.
 Examples of these policies include:
 <ul>
 <li>Determining whether to grant the read lock or the write lock, when
 both readers and writers are waiting, at the time that a writer releases
 the write lock. Writer preference is common, as writes are expected to be
 short and infrequent. Reader preference is less common as it can lead to
 lengthy delays for a write if the readers are frequent and long-lived as
 expected. Fair, or &quot;in-order&quot; implementations are also possible.

 <li>Determining whether readers that request the read lock while a
 reader is active and a writer is waiting, are granted the read lock.
 Preference to the reader can delay the writer indefinitely, while
 preference to the writer can reduce the potential for concurrency.

 <li>Determining whether the locks are reentrant: can a thread with the
 write lock reacquire it? Can it acquire a read lock while holding the
 write lock? Is the read lock itself reentrant?

 <li>Can the write lock be downgraded to a read lock without allowing
 an intervening writer? Can a read lock be upgraded to a write lock,
 in preference to other waiting readers or writers?

 </ul>
 You should consider all of these things when evaluating the suitability
 of a given implementation for your application.</div>
<dl><dt><span class="strong">Since:</span></dt>
  <dd>1.5</dd>
<dt><span class="strong">Author:</span></dt>
  <dd>Doug Lea</dd>
<dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../../../../edu/emory/mathcs/backport/java/util/concurrent/locks/ReentrantReadWriteLock.html" title="class in edu.emory.mathcs.backport.java.util.concurrent.locks"><code>ReentrantReadWriteLock</code></a>, 
<a href="../../../../../../../../edu/emory/mathcs/backport/java/util/concurrent/locks/Lock.html" title="interface in edu.emory.mathcs.backport.java.util.concurrent.locks"><code>Lock</code></a>, 
<a href="../../../../../../../../edu/emory/mathcs/backport/java/util/concurrent/locks/ReentrantLock.html" title="class in edu.emory.mathcs.backport.java.util.concurrent.locks"><code>ReentrantLock</code></a></dd></dl>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ========== METHOD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="method_summary">
<!--   -->
</a>
<h3>Method Summary</h3>
<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
<caption><span>Methods</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Method and Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code><a href="../../../../../../../../edu/emory/mathcs/backport/java/util/concurrent/locks/Lock.html" title="interface in edu.emory.mathcs.backport.java.util.concurrent.locks">Lock</a></code></td>
<td class="colLast"><code><strong><a href="../../../../../../../../edu/emory/mathcs/backport/java/util/concurrent/locks/ReadWriteLock.html#readLock()">readLock</a></strong>()</code>
<div class="block">Returns the lock used for reading.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code><a href="../../../../../../../../edu/emory/mathcs/backport/java/util/concurrent/locks/Lock.html" title="interface in edu.emory.mathcs.backport.java.util.concurrent.locks">Lock</a></code></td>
<td class="colLast"><code><strong><a href="../../../../../../../../edu/emory/mathcs/backport/java/util/concurrent/locks/ReadWriteLock.html#writeLock()">writeLock</a></strong>()</code>
<div class="block">Returns the lock used for writing.</div>
</td>
</tr>
</table>
</li>
</ul>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ============ METHOD DETAIL ========== -->
<ul class="blockList">
<li class="blockList"><a name="method_detail">
<!--   -->
</a>
<h3>Method Detail</h3>
<a name="readLock()">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>readLock</h4>
<pre><a href="../../../../../../../../edu/emory/mathcs/backport/java/util/concurrent/locks/Lock.html" title="interface in edu.emory.mathcs.backport.java.util.concurrent.locks">Lock</a>&nbsp;readLock()</pre>
<div class="block">Returns the lock used for reading.</div>
<dl><dt><span class="strong">Returns:</span></dt><dd>the lock used for reading.</dd></dl>
</li>
</ul>
<a name="writeLock()">
<!--   -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>writeLock</h4>
<pre><a href="../../../../../../../../edu/emory/mathcs/backport/java/util/concurrent/locks/Lock.html" title="interface in edu.emory.mathcs.backport.java.util.concurrent.locks">Lock</a>&nbsp;writeLock()</pre>
<div class="block">Returns the lock used for writing.</div>
<dl><dt><span class="strong">Returns:</span></dt><dd>the lock used for writing.</dd></dl>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
<!-- ========= END OF CLASS DATA ========= -->
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a name="navbar_bottom">
<!--   -->
</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
<!--   -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../../../../../edu/emory/mathcs/backport/java/util/concurrent/locks/Lock.html" title="interface in edu.emory.mathcs.backport.java.util.concurrent.locks"><span class="strong">Prev Class</span></a></li>
<li><a href="../../../../../../../../edu/emory/mathcs/backport/java/util/concurrent/locks/ReentrantLock.html" title="class in edu.emory.mathcs.backport.java.util.concurrent.locks"><span class="strong">Next Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../../../../index.html?edu/emory/mathcs/backport/java/util/concurrent/locks/ReadWriteLock.html" target="_top">Frames</a></li>
<li><a href="ReadWriteLock.html" target="_top">No Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../../../../../../allclasses-noframe.html">All Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
  allClassesLink = document.getElementById("allclasses_navbar_bottom");
  if(window==top) {
    allClassesLink.style.display = "block";
  }
  else {
    allClassesLink.style.display = "none";
  }
  //-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method_summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method_detail">Method</a></li>
</ul>
</div>
<a name="skip-navbar_bottom">
<!--   -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</body>
</html>