Knowledge (XXG)

Read-copy-update

Source đź“ť

192:, colored red to indicate that it might be accessed by a reader at any time, thus requiring updaters to take care. Allocating memory for a new structure transitions to the second state. This structure has indeterminate state (indicated by the question marks) but is inaccessible to readers (indicated by the green color). Because the structure is inaccessible to readers, the updater may carry out any desired operation without fear of disrupting concurrent readers. Initializing this new structure transitions to the third state, which shows the initialized values of the structure's fields. Assigning a reference to this new structure to 396:
from deleting the data structure out from under them. The reason is that lock-based updaters typically update data in place and must therefore exclude readers. In contrast, RCU-based updaters typically take advantage of the fact that writes to single aligned pointers are atomic on modern CPUs, allowing atomic insertion, removal, and replacement of data in a linked structure without disrupting readers. Concurrent RCU readers can then continue accessing the old versions and can dispense with the atomic read-modify-write instructions, memory barriers, and cache misses that are so expensive on modern
4915: 317:. By definition, any RCU read-side critical section in existence at the beginning of a given grace period must complete before the end of that grace period, which constitutes the fundamental guarantee provided by RCU. In addition, the wait-for-readers operation must wait for at least one grace period to elapse. It turns out that this guarantee can be provided with extremely small read-side overheads, in fact, in the limiting case that is actually realized by server-class Linux-kernel builds, the read-side overhead is exactly zero. 169: 212: 4927: 3570: 2213: 4901: 580: 944:
within an RCU read-side critical section. Therefore, if a given CPU executes a context switch (to schedule another process), we know that this CPU must have completed all preceding RCU read-side critical sections. Once all CPUs have executed a context switch, then all preceding RCU read-side critical sections will have completed.
3352: 329:
readers is the semantics of modern CPUs guarantee that readers will see either the old or the new version of the data structure rather than a partially updated reference. Once a grace period has elapsed, there can no longer be any readers referencing the old version, so it is then safe for the reclamation phase to free (
523:
CPU 0 CPU 1 CPU 2 ----------------- ------------------------- --------------- 1. rcu_read_lock() 2. enters synchronize_rcu() 3. rcu_read_lock() 4. rcu_read_unlock() 5.
357:
In the above procedure (which matches the earlier diagram), the updater is performing both the removal and the reclamation step, but it is often helpful for an entirely different thread to do the reclamation. Reference counting can be used to let the reader perform removal so, even if the same thread
412:
Of course, RCU also has disadvantages. For example, RCU is a specialized technique that works best in situations with mostly reads and few updates but is often less applicable to update-only workloads. For another example, although the fact that RCU readers and updaters may execute concurrently is
328:
phases. The removal phase removes references to data items within a data structure (possibly by replacing them with references to new versions of these data items) and can run concurrently with RCU read-side critical sections. The reason that it is safe to run the removal phase concurrently with RCU
180:
A key property of RCU is that readers can access a data structure even when it is in the process of being updated: RCU updaters cannot block readers or force them to retry their accesses. This overview starts by showing how data can be safely inserted into and deleted from linked structures despite
2356:
Ilan Frenkel, Roman Geller, Yoram Ramberg, and Yoram Snir were granted US Patent 7,099,932 in 2006. This patent describes an RCU-like mechanism for retrieving and storing quality of service policy management information using a directory service in a manner that enforces read/write consistency and
562:
to fetch an RCU-protected pointer, which returns a value that may then be safely dereferenced. It also executes any directives required by the compiler or the CPU, for example, a volatile cast for gcc, a memory_order_consume load for C/C++11 or the memory-barrier instruction required by the old DEC
395:
The ability to wait until all readers are done allows RCU readers to use much lighter-weight synchronization—in some cases, absolutely no synchronization at all. In contrast, in more conventional lock-based schemes, readers must use heavy-weight synchronization in order to prevent an updater
219:
This procedure demonstrates how new data may be inserted into a linked data structure even though readers are concurrently traversing the data structure before, during, and after the insertion. The second diagram on the right depicts a four-state deletion procedure, again with time advancing from
2175:
However, there is one potential catch: the read-side and update-side critical sections can now run concurrently. In many cases, this will not be a problem, but it is necessary to check carefully regardless. For example, if multiple independent list updates must be seen as a single atomic update,
943:
moves the caller of synchronize_cpu to each CPU, thus blocking until all CPUs have been able to perform the context switch. Recall that this is a non-preemptive environment and that blocking within an RCU read-side critical section is illegal, which imply that there can be no preemption points
374:
By early 2008, there were almost 2,000 uses of the RCU API within the Linux kernel including the networking protocol stacks and the memory-management system. As of March 2014, there were more than 9,000 uses. Since 2006, researchers have applied RCU and similar techniques to a number of
293:
This procedure demonstrates how old data may be removed from a linked data structure even though readers are concurrently traversing the data structure before, during, and after the deletion. Given insertion and deletion, a wide variety of data structures can be implemented using RCU.
3568:, Frenkel, Ilan; Geller, Roman & Ramberg, Yoram et al., "Method and apparatus for retrieving network quality of service policy information from a directory in a quality of service policy management system", published 2006-08-29, assigned to Cisco Tech Inc. 365:
for a shared data structure. RCU is completely wait-free for any number of readers. Single-writer implementations RCU are also lock-free for the writer. Some multi-writer implementations of RCU are lock-free. Other multi-writer implementations of RCU serialize writers with a lock.
313:, and such statements are not permitted to hold references to RCU-protected data structures, nor is the wait-for-readers operation required to wait for threads in quiescent states. Any time period during which each thread resides at least once in a quiescent state is called a 336:
Splitting an update into removal and reclamation phases allows the updater to perform the removal phase immediately, and to defer the reclamation phase until all readers active during the removal phase have completed, in other words, until a grace period has elapsed.
3295: 400:
computer systems, even in absence of lock contention. The lightweight nature of RCU's read-side primitives provides additional advantages beyond excellent performance, scalability, and real-time response. For example, they provide immunity to most
550:
rcu_assign_pointer(): The updater uses this function to assign a new value to an RCU-protected pointer, in order to safely communicate the change in value from the updater to the reader. This function returns the new value, and also executes any
2431:
Only readers that are active during the removal phase need be considered, because any reader starting after the removal phase will be unable to gain a reference to the removed data items, and therefore cannot be disrupted by the reclamation
282:. In other words, RCU provides coordination in space (different versions of the list) as well as in time (different states in the deletion procedures). This is in stark contrast with more traditional synchronization primitives such as 2271:
and Richard Ladner extended Kung's and Lehman's work to non-garbage-collected environments by deferring reclamation until all threads running at removal time have terminated, which works in environments that do not have long-lived
2302:
Aju John proposed an RCU-like implementation where updaters simply wait for a fixed period of time, under the assumption that readers would all complete within that fixed time, as might be appropriate in a hard real-time system.
267:, new readers have no way to obtain a reference. A wait-for-readers operation transitions to the third state. Note that this wait-for-readers operation need only wait for pre-existing readers, but not new readers. Element 2869:
Appavoo, Jonathan; Da Silva, Dilma; Krieger, Orran; Auslander, Mark; Ostrowski, Michal; Rosenburg, Bryan; Waterland, Amos; Wisniewski, Robert W.; Xenidis, Jimi (August 2007). "Experience distributing objects in an SMMP OS".
2501:
Guniguntala, Dinakar; McKenney, Paul E.; Triplett, Joshua; Walpole, Jonathan (April–June 2008). "The read-copy-update mechanism for supporting real-time applications on shared-memory multiprocessor systems with Linux".
952:
Although RCU can be used in many different ways, a very common use of RCU is analogous to reader–writer locking. The following side-by-side code display shows how closely related reader–writer locking and RCU can be.
3350:, Slingwine, John D. & McKenney, Paul E., "Apparatus and Method for Achieving Reduced Overhead Mutual Exclusion and Maintaining Coherency in a Multiprocessor System", published August 1995 496:
The implementation of RCU in version 2.6 of the Linux kernel is among the better-known RCU implementations and will be used as an inspiration for the RCU API in the remainder of this article. The core API
350:
Wait for a grace period to elapse, so that all previous readers (which might still have pointers to the data structure removed in the prior step) will have completed their RCU read-side critical sections.
508:
rcu_read_unlock(): Used by a reader to inform the reclaimer that the reader is exiting an RCU read-side critical section. Note that RCU read-side critical sections may be nested and/or overlapping.
2285:
James P. Hennessy, Damian L. Osisek, and Joseph W. Seigh, II were granted US Patent 4,809,168 in 1989 (since lapsed). This patent describes an RCU-like mechanism that was apparently used in
3267: 541:
Alternatively, instead of blocking, synchronize_rcu may register a callback to be invoked after all ongoing RCU read-side critical sections have completed. This callback variant is called
614:
callbacks may be invoked. Efficient implementations of the RCU infrastructure make heavy use of batching in order to amortize their overhead over many uses of the corresponding APIs.
3654:(1995) "Apparatus and method for achieving reduced overhead mutual exclusion and maintaining coherency in a multiprocessor system utilizing execution history and thread monitoring" 4477: 3766: 3293:, Hennessy, James P.; Osisek, Damian L. & Seigh II, Joseph W., "Passive Serialization in a Multitasking Environment", published February 1989 2453:
RCU-based deadlocks are still possible, for example by executing a statement that blocks until a grace period completes within an RCU read-side critical section.
854:
can be ignored without missing much. However, they are needed in order to suppress harmful compiler optimization and to prevent CPUs from reordering accesses.
243:
from this list transitions to the second state. Note that the link from element B to C is left intact in order to allow readers currently referencing element
2999:
Hart, Thomas E.; McKenney, Paul E.; Demke Brown, Angela; Walpole, Jonathan (December 2007). "Performance of memory reclamation for lockless synchronization".
2282:(TLB) implementation that deferred reclaiming virtual-address space until all CPUs flushed their TLB, which is similar in spirit to some RCU implementations. 936:. However, in this toy RCU implementation, blocking within an RCU read-side critical section is illegal, just as is blocking while holding a pure spinlock. 532:
is the API that must figure out when readers are done, its implementation is key to RCU. For RCU to be useful in all but the most read-intensive situations,
136:, hence the name "read-copy update". The abbreviation "RCU" was one of many contributions by the Linux community. Other names for similar techniques include 2834:; Krieger, Orran; Wisniewski, Robert W.; Waterland, Amos; Tam, David; Baumann, Andrew (April 2006). "K42: an infrastructure for operating system research". 4566: 4561: 622:
RCU has extremely simple "toy" implementations that can aid understanding of RCU. This section presents one such "toy" implementation that works in a
425: 113:
sleep until the operating system kernel determines that there are no readers left using the old structure, for example, in the Linux kernel, by using
278:
It is important to reiterate that in the second state different readers can see two different versions of the list, either with or without element
375:
problems, including management of metadata used in dynamic analysis, managing the lifetime of clustered objects, managing object lifetime in the
200:
primitive is used to carry out this assignment and ensures that the assignment is atomic in the sense that concurrent readers will either see a
70:, all readers are guaranteed to see and traverse either the older or the new structure, therefore avoiding inconsistencies (e.g., dereferencing 3691: 3417: 3391: 2975: 2815: 2770: 2694: 2441: 4953: 4919: 358:
performs both the update step (step (2) above) and the reclamation step (step (4) above), it is often helpful to think of them separately.
353:
At this point, there cannot be any readers still holding references to the data structure, so it now may safely be reclaimed (e.g., freed).
2950:
Porter, Donald E.; Hofmann, Owen S.; Rossbach, Christopher J.; Benn, Alexander; Witchel, Emmett (2009). "Operating systems transactions".
271:
is now colored green to indicate that readers can no longer be referencing it. Therefore, it is now safe for the updater to free element
93:
The name comes from the way that RCU is used to update a linked structure in place. A thread wishing to do this uses the following steps:
3315:(Technical report). Institute of Advanced Computer Science Studies, Department of Computer Science, University of Maryland. CS-TR-2222.1. 555:
instructions required for a given CPU architecture. Perhaps more importantly, it serves to document which pointers are protected by RCU.
344:
Ensure that all readers accessing RCU-protected data structures carry out their references from within an RCU read-side critical section.
519:
necessarily wait for any subsequent RCU read-side critical sections to complete. For example, consider the following sequence of events:
2382: 196:
transitions to the fourth and final state. In this state, the structure is accessible to readers, and is therefore colored red. The
181:
concurrent readers. The first diagram on the right depicts a four-state insertion procedure, with time advancing from left to right.
82: 32: 4298: 4066: 2485: 2296: 505:
rcu_read_lock(): Marks an RCU-protected data structure so that it won't be reclaimed for the full duration of that critical section.
498: 413:
what enables the lightweight nature of RCU's read-side primitives, some algorithms may not be amenable to read/update concurrency.
3266:
Rashid, Richard; Tevanian, Avadis; Young, Michael; Golub, David; Baron, Robert; Bolosky, William; Chew, Jonathan (October 1987).
2387: 3796: 3443: 3102:
McKenney, Paul E.; Appavoo, Jonathan; Kleen, Andi; Krieger, Orran; Russell, Rusty; Sarma, Dipankar; Soni, Maneesh (July 2001).
4408: 101: 44: 3736: 908:
do nothing. This is the great strength of classic RCU in a non-preemptive kernel: read-side overhead is precisely zero, as
4842: 380: 2604: 4958: 4723: 3771: 2279: 511:
synchronize_rcu(): Blocks until all pre-existing RCU read-side critical sections on all CPUs have completed. Note that
4125: 925: 402: 235:. All three elements are colored red to indicate that an RCU reader might reference any of them at any time. Using 172:
Read-copy-update insertion procedure. A thread allocates a structure with three fields, then sets the global pointer
3327: 416:
Despite well over a decade of experience with RCU, the exact extent of its applicability is still a research topic.
4824: 4638: 3756: 3684: 2616: 2321: 2310:
J. Slingwine and P. E. McKenney received US Patent 5,442,758 in August 1995, which describes RCU as implemented in
283: 204:
pointer or a valid pointer to the new structure, but not some mash-up of the two values. Additional properties of
157: 4829: 4471: 3807: 397: 2642:
McKenney, Paul E.; Walpole, Jonathan (July 2008). "Introducing technology into the Linux kernel: a case study".
4392: 4377: 4293: 4081: 3886: 2575: 2392: 623: 437: 78: 4735: 4534: 4170: 4058: 4013: 3963: 3947: 3924: 3474: 3473:
Desnoyers, Mathieu; McKenney, Paul E.; Stern, Alan; Dagenais, Michel R.; Walpole, Jonathan (February 2012).
2377: 933: 36: 3746: 4880: 4857: 4852: 4687: 4653: 4643: 4515: 4460: 4337: 3876: 3211: 3179: 2914: 362: 263:
is now colored yellow to indicate that while pre-existing readers might still have a reference to element
168: 3581: 3580:
Bauer, R.T., (June 2009), "Operational Verification of a Relativistic Program" PSU Tech Report TR-09-04 (
387:
uses a technique similar to RCU that most closely resembles Linux's Sleepable RCU (SRCU) implementation.
81:, enabling fast operations at the cost of more space. This makes all readers proceed as if there were no 4931: 4834: 3677: 2318: 2286: 211: 145: 56: 3247:
Manber, Udi; Ladner, Richard E. (September 1984). "Concurrency Control in a Dynamic Search Structure".
2719: 2265:
and Q. Lehman described use of garbage collectors to implement RCU-like access to a binary search tree.
3565: 3347: 3290: 4864: 4466: 4028: 3726: 3269:
Machine-Independent Virtual Memory Management for Paged Uniprocessor and Multiprocessor Architectures
3053: 2347:
Robert Colvin et al. formally verified a lazy concurrent list-based set algorithm that resembles RCU.
3216: 3103: 2919: 4660: 4139: 3998: 3932: 3421: 3395: 2566: 2407: 2402: 2397: 2367: 920:
macro is a volatile cast that generates no additional code in most cases. And there is no way that
587:
The diagram on the right shows how each API communicates among the reader, updater, and reclaimer.
3367: 4814: 4648: 4234: 4134: 4071: 3993: 3988: 3776: 3542: 3497: 3229: 2981: 2932: 2887: 2851: 2776: 2700: 2659: 2629: 929: 287: 40: 2341: 3369:
Tornado: Maximizing Locality and Concurrency in a Shared Memory Multiprocessor Operating System
2755:
Proceedings of the 42nd Annual IEEE/ACM International Symposium on Microarchitecture - Micro-42
2677:
Olsson, Robert; Nilsson, Stefan (May 2007). "TRASH a dynamic LC-trie and hash data structure".
4785: 4433: 4403: 4398: 4249: 3904: 3866: 3662: 3618: 3598: 3520: 3081: 3031: 2971: 2811: 2766: 2690: 2534: 2481: 524:
exits synchronize_rcu() 6. rcu_read_unlock()
347:
Remove pointers to a data structure, so that subsequent readers cannot gain a reference to it.
2556: 259:, but either way, each reader will see a valid and correctly formatted linked list. Element 4539: 3822: 3812: 3721: 3489: 3221: 3008: 2963: 2955: 2924: 2879: 2843: 2803: 2758: 2682: 2651: 2511: 2337:
and Phil Rumpf described RCU-like techniques for handling unloading of Linux kernel modules.
20: 3637: 3202:
Kung, H. T.; Lehman, Q. (September 1980). "Concurrent Maintenance of Binary Search Trees".
2317:
B. Gamsa, O. Krieger, J. Appavoo, and M. Stumm described an RCU-like mechanism used in the
4775: 4443: 4224: 3632: 3131: 2590: 2412: 2258:
Techniques and mechanisms resembling RCU have been independently invented multiple times:
428: 3310: 3277:
Second Symposium on Architectural Support for Programming Languages and Operating Systems
2739: 2632:. quote: "To manage write–write conflicts, most RCU data structures use regular locking." 309:. Any statement that is not within an RCU read-side critical section is said to be in a 2800:
PLOS '06: Proceedings of the 3rd Workshop on Programming Languages and Operating Systems
2156:
The differences between the two approaches are quite small. Read-side locking moves to
4805: 4710: 4621: 4498: 4493: 4488: 4483: 4266: 4091: 4086: 3731: 2952:
Proceedings of the ACM SIGOPS 22nd symposium on Operating systems principles - SOSP '09
2831: 2275: 552: 48: 4947: 4740: 4556: 4362: 4352: 4111: 3983: 3861: 3157: 3127: 2372: 2334: 2290: 384: 67: 3633:
Making Lockless Synchronization Fast: Performance Implications of Memory Reclamation
3456: 3233: 2967: 2704: 2663: 4905: 4626: 4544: 4438: 4382: 3741: 3700: 3640:
comparing RCU's performance to that of other lockless synchronization mechanisms.
2936: 2780: 2325: 2304: 2238: 486: 71: 52: 3501: 2891: 2855: 2164:, update-side locking moves from a reader-writer lock to a simple spinlock, and a 2985: 4631: 4524: 4106: 4003: 3642: 3377:
Proceedings of the Third Symposium on Operating System Design and Implementation
2753:
Kannan, Hari (2009). "Ordering decoupled metadata accesses in multiprocessors".
2299:
described an RCU-like mechanism that relied on explicit flag-setting by readers.
247:
to traverse the remainder of the list. Readers accessing the link from element
3366:
Gamsa, Ben; Krieger, Orran; Appavoo, Jonathan; Stumm, Michael (February 1999).
3012: 4718: 4693: 4680: 4585: 4573: 4503: 4413: 3899: 3802: 3761: 3650: 3442:
Colvin, Robert; Groves, Lindsay; Luchangco, Victor; Moir, Mark (August 2006).
3189:
OGI School of Science and Engineering at Oregon Health and Sciences University
2686: 2268: 2262: 471: 470:
covers a closely related technique. RCU is also the topic of one claim in the
466: 460: 454: 448: 442: 432: 60: 2353:
A. Gotsman et al. derived formal semantics for RCU based on separation logic.
928:
cycle, cause a realtime process to miss its scheduling deadline, precipitate
4580: 4549: 4418: 4254: 4043: 3914: 3871: 2959: 2928: 2883: 2847: 2807: 2762: 2655: 2311: 2227: 913: 567:
is valid only within the enclosing RCU read-side critical section. As with
3515:
McKenney, Paul E.; Desnoyers, Mathieu; Jiangshan, Lai (November 13, 2013).
3181:
Exploiting Deferred Destruction: An Analysis of Read-Copy-Update Techniques
3153: 2796:
Portability events: a programming model for scalable system infrastructures
85:
involved, hence they will be fast, but also making updates more difficult.
3493: 3225: 2905:
Fraser, Keir; Harris, Tim (2007). "Concurrent programming without locks".
66:
Whenever a thread is inserting or deleting elements of data structures in
4698: 4519: 4508: 4428: 4372: 4367: 4313: 4261: 4150: 4076: 3625: 2223: 406: 2515: 4780: 4765: 4675: 4665: 4605: 4529: 4423: 4347: 4288: 4202: 4165: 4096: 4038: 4033: 3937: 3894: 2558:
Read-Copy Update: Using Execution History to Solve Concurrency Problems
485:
RCU is available in a number of operating systems and was added to the
474: 340:
So, the typical RCU update sequence goes something like the following:
3594:
Paul E. McKenney, Mathieu Desnoyers, and Lai Jiangshan: User-space RCU
3582:
http://www.pdx.edu/sites/www.pdx.edu.computer-science/files/tr0904.pdf
4770: 4755: 4745: 4600: 4595: 4357: 4308: 4281: 4244: 4214: 4181: 4160: 3909: 3856: 3751: 3541:
Gotsman, Alexey; Rinetzky, Noam; Yang, Hongseok (March 16–24, 2013).
2199:. This is especially useful in combination with reference counting. 77:
It is used when performance of reads is crucial and is an example of
3657: 3613: 3609: 3605: 3593: 3516: 3077: 3027: 2721:
A Lockless Pagecache in Linux---Introduction, Progress, Performance
2530: 579: 4900: 4590: 4453: 4387: 4342: 4303: 4271: 4239: 4197: 4192: 4155: 4023: 4018: 3978: 3973: 3606:
Paul E. McKenney and Jonathan Walpole: What is RCU, Fundamentally?
578: 320:
RCU's fundamental guarantee may be used by splitting updates into
210: 167: 100:
copy the data from the old structure into the new one, and save a
3445:
Formal Verification of a Lazy Concurrent List-Based Set Algorithm
583:
RCU API communications between the reader, updater, and reclaimer
4670: 4448: 4276: 4207: 3851: 3673: 3669: 916:
CPUs; such memory barriers are not needed on modern CPUs. The
4750: 4728: 2350:
M. Desnoyers et al. published a description of user-space RCU.
2328: 2206: 376: 153: 43:
concurrently read and update elements that are linked through
3544:
Verifying concurrent memory reclamation algorithms with grace
2794:
Matthews, Chris; Coady, Yvonne; Appavoo, Jonathan (2009).
2603:
Naama Ben-David; Guy E. Blelloch; Yihan Sun; Yuanhao Wei.
2529:
McKenney, Paul E.; Walpole, Jonathan (December 17, 2007).
120:
once awakened by the kernel, deallocate the old structure.
2307:
proposed a similar scheme in 1993 (verbal communication).
490: 223:
The first state shows a linked list containing elements
110:
update the global pointer to refer to the new structure,
2679:
2007 Workshop on High Performance Switching and Routing
2234: 2555:
McKenney, Paul E.; Slingwine, John D. (October 1998).
3482:
IEEE Transactions on Parallel and Distributed Systems
590:
The RCU infrastructure observes the time sequence of
489:
in October 2002. User-level implementations such as
3128:"Shared Memory, Threads, Interprocess Communication" 2444:, where available, may be used to perform this step. 275:, thus transitioning to the fourth and final state. 4873: 4813: 4804: 4709: 4614: 4330: 4223: 4133: 4124: 4057: 3962: 3955: 3946: 3923: 3885: 3844: 3837: 3785: 3714: 3707: 575:
is to document which pointers are protected by RCU.
2617:"Lock-free multithreading with atomic operations" 464:(expired 2009-05-25). The now-expired US Patent 3475:"User-Level Implementations of Read-Copy Update" 3329:Dynamic vnodes — design and implementation 610:invocations may return to their callers and (2) 333:) the data items that made up that old version. 2567:Parallel and Distributed Computing and Systems 3685: 2176:converting to RCU will require special care. 184:The first state shows a global pointer named 8: 2480:(4th ed.). USA: Pearson. p. 148. 606:invocations in order to determine when (1) 290:that coordinate in time, but not in space. 4810: 4706: 4130: 3959: 3952: 3841: 3711: 3692: 3678: 3670: 3552:ESOP'13: European Symposium on Programming 436:, issued August 15, 1995, and assigned to 379:research operating system, and optimizing 251:will either obtain a reference to element 3215: 2918: 4920:Free and open-source software portal 4478:Earliest eligible virtual deadline first 3630:Hart, McKenney, and Demke Brown (2006). 3154:"Using {RCU} in the {Linux} 2.5 Kernel" 2465: 2424: 3279:. Association for Computing Machinery. 3076:McKenney, Paul E. (January 17, 2008). 2585: 2584: 2573: 3026:McKenney, Paul E. (January 4, 2008). 2605:"Efficient Single Writer Concurrency" 2187:can now block. If this is a problem, 859:#define rcu_assign_pointer(p, v) ({ \ 536:'s overhead must also be quite small. 208:are described later in this article. 7: 3312:Concurrent Maintenance of Skip Lists 3249:ACM Transactions on Database Systems 3204:ACM Transactions on Database Systems 3052:Desnoyers, Mathieu (December 2009). 2907:ACM Transactions on Computer Systems 2872:ACM Transactions on Computer Systems 2471: 2469: 880:typeof(p) _value = ACCESS_ONCE(p); \ 3055:Low-Impact Operating System Tracing 2740:"Paul E. McKenney: RCU Linux Usage" 558:rcu_dereference(): The reader uses 215:Read-copy-update deletion procedure 3152:McKenney, Paul E. (October 2003). 2383:Lock-free and wait-free algorithms 2342:version 2.5.43 of the Linux kernel 948:Analogy with reader–writer locking 724:// add callback/arg pair to a list 563:Alpha CPU. The value returned by 301:, which are normally delimited by 107:modify the new, copied, structure, 14: 2322:Tornado research operating system 499:Application Programming Interface 35:mechanism that avoids the use of 4926: 4925: 4913: 4899: 3767:Supported computer architectures 2388:Multiversion concurrency control 2211: 3797:The Linux Programming Interface 3626:Paul E. McKenney's RCU web page 3178:McKenney, Paul E. (July 2004). 3063:École Polytechnique de Montreal 2357:enables read/write concurrency. 886:/* nop on most architectures */ 877:#define rcu_dereference(p) ({ \ 361:RCU is perhaps the most common 3646:(including Walpole as author). 2314:and later in the Linux kernel. 2226:format but may read better as 2183:means that the RCU version of 1: 2531:"What is RCU, Fundamentally?" 912:is an empty macro on all but 381:software transactional memory 297:RCU's readers execute within 3658:Paul McKenney: Sleepable RCU 3416:Russell, Rusty (June 2000). 3390:Russell, Rusty (June 2000). 2280:translation lookaside buffer 883:smp_read_barrier_depends(); 865:/* Order previous writes. */ 424:The technique is covered by 391:Advantages and disadvantages 4954:Operating system technology 3453:Computer Aided Verification 3309:Pugh, William (June 1990). 3126:Wizard, The (August 2001). 3001:J. Parallel Distrib. Comput 2630:"Notes on Read-Copy Update" 2331:research operating systems. 958:/* reader-writer locking */ 571:, an important function of 299:read-side critical sections 176:to point to this structure. 128:concurrently with a thread 4975: 4639:High-performance computing 4461:Process and I/O schedulers 3610:What is RCU? Part 2: Usage 3326:John, Aju (January 1995). 3013:10.1016/j.jpdc.2007.04.010 2718:Piggin, Nick (July 2006). 2476:Tanenbaum, Andrew (2015). 910:smp_read_barrier_depends() 624:non-preemptive environment 458:(expired 2009-05-18), and 47:and that belong to shared 39:primitives while multiple 4893: 4472:Completely Fair Scheduler 3737:Tanenbaum–Torvalds debate 3418:"Re: modular net drivers" 3392:"Re: modular net drivers" 3078:"RCU part 3: the RCU API" 2687:10.1109/HPSR.2007.4281239 16:Synchronization mechanism 4393:Kernel same-page merging 2968:2152/ETD-UT-2010-12-2488 2478:Modern Operating Systems 2393:Pre-emptive multitasking 2324:and the closely related 2278:et al. described a lazy 955: 856: 784:schedule_current_task_to 628: 438:Sequent Computer Systems 4736:OS-level virtualization 3614:RCU part 3: the RCU API 2960:10.1145/1629575.1629591 2929:10.1145/1233307.1233309 2884:10.1145/1275517.1275518 2848:10.1145/1131322.1131333 2808:10.1145/1215995.1216006 2763:10.1145/1669112.1669161 2656:10.1145/1400097.1400099 2378:Lock (computer science) 2235:converting this section 1362:list_for_each_entry_rcu 1099:/* Other data fields */ 1093:/* Other data fields */ 871:ACCESS_ONCE(p) = (v); \ 97:create a new structure, 4881:List of Linux adopters 3823:Linux User Group (LUG) 3113:Ottawa Linux Symposium 2836:SIGOPS Oper. Syst. Rev 2726:Ottawa Linux Symposium 2644:SIGOPS Oper. Syst. Rev 2340:D. Sarma added RCU to 2179:Also, the presence of 939:The implementation of 584: 452:(expired 2010-04-05), 446:(expired 2009-03-30), 363:non-blocking algorithm 216: 177: 3651:U.S. patent 5,442,758 3638:IPDPS 2006 Best Paper 3494:10.1109/TPDS.2011.159 3226:10.1145/320613.320619 2802:. San Jose, CA, USA. 2319:University of Toronto 924:can participate in a 618:Simple implementation 582: 467:U.S. patent 4,809,168 461:U.S. patent 6,886,162 455:U.S. patent 6,219,690 449:U.S. patent 5,727,209 443:U.S. patent 5,608,893 433:U.S. patent 5,442,758 214: 171: 138:passive serialization 104:to the old structure, 4467:Brain Fuck Scheduler 3727:Linux Mark Institute 2757:. pp. 381–390. 932:, or result in high 846:In the code sample, 545:in the Linux kernel. 493:are also available. 481:Sample RCU interface 164:Detailed description 124:So the structure is 4959:Concurrency control 4661:Real-time computing 3933:Linux Standard Base 3028:"RCU part 2: Usage" 2570:. pp. 509–518. 2516:10.1147/sj.472.0221 2504:IBM Systems Journal 2408:Resource starvation 2403:Resource contention 2398:Real-time computing 2368:Concurrency control 2193:call_rcu (kfree, p) 2191:could be used like 1813:list_for_each_entry 1780:list_for_each_entry 1329:list_for_each_entry 79:space–time tradeoff 4649:Compute Node Linux 4235:C standard library 3334:USENIX Winter 1995 2442:Garbage collectors 2237:, if appropriate. 930:priority inversion 848:rcu_assign_pointer 585: 569:rcu_assign_pointer 501:) is quite small: 383:implementations. 239:to remove element 217: 206:rcu_assign_pointer 198:rcu_assign_pointer 188:that is initially 178: 132:in order to do an 4941: 4940: 4889: 4888: 4800: 4799: 4796: 4795: 4434:Network scheduler 4326: 4325: 4322: 4321: 4120: 4119: 3867:Linux kernel oops 3833: 3832: 3813:Linux conferences 3663:Linux Weekly News 3619:Linux Weekly News 3599:Linux Weekly News 3521:Linux Weekly News 3082:Linux Weekly News 3032:Linux Weekly News 3007:(12): 1270–1285. 2977:978-1-60558-752-3 2817:978-1-59593-577-9 2772:978-1-60558-798-1 2696:978-1-4244-1205-1 2583:External link in 2535:Linux Weekly News 2256: 2255: 115:synchronize_rcu() 89:Name and overview 4966: 4929: 4928: 4918: 4917: 4916: 4906:Linux portal 4904: 4903: 4811: 4707: 4516:Security Modules 4131: 3960: 3953: 3842: 3722:Linux Foundation 3712: 3694: 3687: 3680: 3671: 3653: 3575: 3574: 3573: 3569: 3562: 3556: 3555: 3549: 3538: 3532: 3531: 3529: 3527: 3517:"User-space RCU" 3512: 3506: 3505: 3479: 3470: 3464: 3463: 3461: 3455:. Archived from 3450: 3439: 3433: 3432: 3430: 3429: 3420:. Archived from 3413: 3407: 3406: 3404: 3403: 3394:. Archived from 3387: 3381: 3380: 3374: 3363: 3357: 3356: 3355: 3351: 3344: 3338: 3337: 3323: 3317: 3316: 3306: 3300: 3299: 3298: 3294: 3287: 3281: 3280: 3274: 3263: 3257: 3256: 3244: 3238: 3237: 3219: 3199: 3193: 3192: 3186: 3175: 3169: 3168: 3166: 3164: 3149: 3143: 3142: 3140: 3138: 3123: 3117: 3116: 3110: 3105:Read-Copy Update 3099: 3093: 3092: 3090: 3088: 3073: 3067: 3066: 3060: 3049: 3043: 3042: 3040: 3038: 3023: 3017: 3016: 2996: 2990: 2989: 2947: 2941: 2940: 2922: 2902: 2896: 2895: 2866: 2860: 2859: 2828: 2822: 2821: 2791: 2785: 2784: 2750: 2744: 2743: 2736: 2730: 2729: 2715: 2709: 2708: 2681:. pp. 1–6. 2674: 2668: 2667: 2639: 2633: 2626: 2620: 2614: 2608: 2601: 2595: 2594: 2588: 2587: 2581: 2579: 2571: 2563: 2552: 2546: 2545: 2543: 2541: 2526: 2520: 2519: 2498: 2492: 2491: 2473: 2454: 2451: 2445: 2439: 2433: 2429: 2344:in October 2002. 2251: 2248: 2242: 2233:You can help by 2215: 2214: 2207: 2198: 2194: 2190: 2186: 2182: 2171: 2167: 2163: 2159: 2152: 2149: 2146: 2143: 2140: 2137: 2134: 2131: 2128: 2125: 2122: 2119: 2116: 2115: 2112: 2109: 2106: 2103: 2100: 2097: 2094: 2091: 2088: 2085: 2082: 2078: 2075: 2072: 2069: 2066: 2063: 2060: 2057: 2054: 2051: 2048: 2045: 2042: 2039: 2036: 2033: 2030: 2027: 2024: 2021: 2018: 2015: 2012: 2009: 2006: 2003: 2000: 1999: 1996: 1993: 1989: 1988: 1985: 1982: 1979: 1976: 1973: 1970: 1967: 1964: 1961: 1958: 1955: 1951: 1950: 1947: 1944: 1941: 1938: 1935: 1932: 1929: 1926: 1923: 1920: 1917: 1914: 1911: 1908: 1905: 1901: 1898: 1895: 1892: 1889: 1886: 1883: 1880: 1877: 1874: 1871: 1868: 1865: 1862: 1859: 1856: 1853: 1850: 1847: 1844: 1841: 1838: 1835: 1832: 1829: 1826: 1823: 1820: 1817: 1814: 1811: 1808: 1805: 1802: 1799: 1796: 1793: 1790: 1787: 1784: 1781: 1778: 1775: 1774: 1771: 1768: 1765: 1762: 1759: 1756: 1753: 1750: 1747: 1744: 1741: 1737: 1734: 1731: 1728: 1725: 1722: 1719: 1716: 1713: 1710: 1707: 1704: 1701: 1698: 1695: 1692: 1689: 1686: 1683: 1680: 1677: 1674: 1671: 1668: 1665: 1662: 1659: 1656: 1653: 1650: 1647: 1644: 1641: 1638: 1635: 1632: 1629: 1626: 1623: 1620: 1617: 1614: 1611: 1608: 1605: 1604: 1601: 1598: 1595: 1592: 1589: 1586: 1583: 1580: 1576: 1573: 1570: 1567: 1564: 1561: 1558: 1555: 1552: 1549: 1546: 1543: 1540: 1537: 1534: 1531: 1528: 1527: 1524: 1521: 1518: 1515: 1512: 1509: 1506: 1503: 1499: 1496: 1493: 1490: 1487: 1484: 1481: 1478: 1475: 1472: 1469: 1466: 1463: 1460: 1457: 1454: 1451: 1448: 1445: 1442: 1439: 1436: 1433: 1430: 1427: 1424: 1421: 1418: 1415: 1412: 1409: 1406: 1403: 1400: 1397: 1394: 1391: 1390: 1387: 1384: 1381: 1378: 1375: 1372: 1369: 1366: 1363: 1360: 1357: 1354: 1351: 1348: 1345: 1342: 1339: 1336: 1333: 1330: 1327: 1323: 1322: 1319: 1316: 1313: 1310: 1307: 1304: 1301: 1298: 1294: 1291: 1288: 1285: 1282: 1279: 1276: 1273: 1270: 1267: 1264: 1261: 1258: 1255: 1252: 1249: 1246: 1243: 1240: 1237: 1234: 1231: 1228: 1225: 1222: 1219: 1216: 1213: 1210: 1207: 1204: 1201: 1198: 1195: 1192: 1189: 1186: 1183: 1180: 1177: 1174: 1171: 1168: 1165: 1162: 1159: 1156: 1153: 1150: 1147: 1144: 1143: 1140: 1137: 1134: 1131: 1128: 1125: 1122: 1119: 1116: 1112: 1109: 1106: 1103: 1100: 1097: 1094: 1091: 1088: 1085: 1082: 1079: 1076: 1073: 1070: 1067: 1064: 1061: 1058: 1055: 1052: 1049: 1046: 1043: 1040: 1037: 1034: 1031: 1028: 1025: 1022: 1019: 1016: 1013: 1010: 1007: 1004: 1001: 998: 995: 992: 989: 986: 983: 980: 977: 974: 971: 968: 965: 962: 959: 942: 923: 919: 911: 907: 903: 896: 893: 890: 887: 884: 881: 878: 875: 872: 869: 866: 863: 860: 853: 849: 842: 839: 836: 833: 830: 827: 824: 821: 818: 815: 812: 809: 806: 803: 800: 797: 794: 791: 788: 785: 782: 779: 776: 773: 770: 767: 764: 761: 758: 755: 752: 749: 746: 743: 740: 737: 734: 731: 728: 725: 722: 719: 716: 713: 710: 707: 704: 701: 698: 695: 692: 689: 686: 683: 680: 677: 674: 671: 668: 665: 662: 659: 656: 653: 650: 647: 644: 641: 638: 635: 632: 613: 609: 605: 601: 597: 593: 574: 570: 566: 561: 544: 535: 531: 514: 469: 463: 457: 451: 445: 440:, as well as by 435: 308: 304: 281: 274: 270: 266: 262: 258: 254: 250: 246: 242: 238: 234: 230: 226: 207: 203: 199: 195: 191: 187: 175: 148:programmers and 116: 25:read-copy-update 21:computer science 4974: 4973: 4969: 4968: 4967: 4965: 4964: 4963: 4944: 4943: 4942: 4937: 4914: 4912: 4898: 4885: 4869: 4816: 4792: 4776:User-mode Linux 4705: 4610: 4318: 4226: 4219: 4138: 4116: 4053: 3965: 3942: 3919: 3881: 3829: 3781: 3772:Version history 3703: 3698: 3649: 3643:Journal version 3590: 3578: 3571: 3564: 3563: 3559: 3547: 3540: 3539: 3535: 3525: 3523: 3514: 3513: 3509: 3477: 3472: 3471: 3467: 3459: 3448: 3441: 3440: 3436: 3427: 3425: 3415: 3414: 3410: 3401: 3399: 3389: 3388: 3384: 3372: 3365: 3364: 3360: 3353: 3346: 3345: 3341: 3325: 3324: 3320: 3308: 3307: 3303: 3296: 3289: 3288: 3284: 3272: 3265: 3264: 3260: 3246: 3245: 3241: 3217:10.1.1.639.8357 3201: 3200: 3196: 3184: 3177: 3176: 3172: 3162: 3160: 3151: 3150: 3146: 3136: 3134: 3132:Hewlett-Packard 3125: 3124: 3120: 3108: 3101: 3100: 3096: 3086: 3084: 3075: 3074: 3070: 3058: 3051: 3050: 3046: 3036: 3034: 3025: 3024: 3020: 2998: 2997: 2993: 2978: 2954:. p. 161. 2949: 2948: 2944: 2920:10.1.1.532.5050 2904: 2903: 2899: 2878:(3): 6/1–6/52. 2868: 2867: 2863: 2832:Da Silva, Dilma 2830: 2829: 2825: 2818: 2793: 2792: 2788: 2773: 2752: 2751: 2747: 2738: 2737: 2733: 2717: 2716: 2712: 2697: 2676: 2675: 2671: 2641: 2640: 2636: 2627: 2623: 2615: 2611: 2602: 2598: 2582: 2576:cite conference 2572: 2561: 2554: 2553: 2549: 2539: 2537: 2528: 2527: 2523: 2500: 2499: 2495: 2488: 2475: 2474: 2467: 2463: 2458: 2457: 2452: 2448: 2440: 2436: 2430: 2426: 2421: 2413:Synchronization 2364: 2252: 2246: 2243: 2232: 2216: 2212: 2205: 2197:synchronize_rcu 2196: 2192: 2188: 2184: 2181:synchronize_rcu 2180: 2169: 2166:synchronize_rcu 2165: 2162:rcu_read_unlock 2161: 2157: 2154: 2153: 2150: 2147: 2144: 2141: 2138: 2135: 2132: 2129: 2126: 2123: 2120: 2117: 2113: 2110: 2107: 2104: 2101: 2098: 2095: 2092: 2089: 2086: 2083: 2080: 2079: 2076: 2073: 2070: 2067: 2064: 2061: 2058: 2055: 2052: 2049: 2046: 2043: 2040: 2037: 2034: 2031: 2028: 2025: 2022: 2019: 2016: 2013: 2010: 2007: 2004: 2001: 1997: 1995:synchronize_rcu 1994: 1991: 1990: 1986: 1983: 1980: 1977: 1974: 1971: 1968: 1965: 1962: 1959: 1956: 1953: 1952: 1948: 1945: 1942: 1939: 1936: 1933: 1930: 1927: 1924: 1921: 1918: 1915: 1912: 1909: 1906: 1903: 1902: 1899: 1896: 1893: 1890: 1887: 1884: 1881: 1878: 1875: 1872: 1869: 1866: 1863: 1860: 1857: 1854: 1851: 1848: 1845: 1842: 1839: 1836: 1833: 1830: 1827: 1824: 1821: 1818: 1815: 1812: 1809: 1806: 1803: 1800: 1797: 1794: 1791: 1788: 1785: 1782: 1779: 1776: 1772: 1769: 1766: 1763: 1760: 1757: 1754: 1751: 1748: 1745: 1742: 1739: 1738: 1735: 1732: 1729: 1726: 1723: 1720: 1717: 1714: 1711: 1708: 1705: 1702: 1699: 1696: 1693: 1690: 1687: 1684: 1681: 1678: 1675: 1672: 1669: 1666: 1663: 1660: 1657: 1654: 1651: 1648: 1645: 1642: 1639: 1636: 1633: 1630: 1627: 1624: 1621: 1618: 1615: 1612: 1609: 1606: 1602: 1600:rcu_read_unlock 1599: 1596: 1593: 1590: 1587: 1584: 1581: 1578: 1577: 1574: 1571: 1568: 1565: 1562: 1559: 1556: 1553: 1550: 1547: 1544: 1541: 1538: 1535: 1532: 1529: 1525: 1523:rcu_read_unlock 1522: 1519: 1516: 1513: 1510: 1507: 1504: 1501: 1500: 1497: 1494: 1491: 1488: 1485: 1482: 1479: 1476: 1473: 1470: 1467: 1464: 1461: 1458: 1455: 1452: 1449: 1446: 1443: 1440: 1437: 1434: 1431: 1428: 1425: 1422: 1419: 1416: 1413: 1410: 1407: 1404: 1401: 1398: 1395: 1392: 1388: 1385: 1382: 1379: 1376: 1373: 1370: 1367: 1364: 1361: 1358: 1355: 1352: 1349: 1346: 1343: 1340: 1337: 1334: 1331: 1328: 1325: 1324: 1320: 1317: 1314: 1311: 1308: 1305: 1302: 1299: 1296: 1295: 1292: 1289: 1286: 1283: 1280: 1277: 1274: 1271: 1268: 1265: 1262: 1259: 1256: 1253: 1250: 1247: 1244: 1241: 1238: 1235: 1232: 1229: 1226: 1223: 1220: 1217: 1214: 1211: 1208: 1205: 1202: 1199: 1196: 1193: 1190: 1187: 1184: 1181: 1178: 1175: 1172: 1169: 1166: 1163: 1160: 1157: 1154: 1151: 1148: 1145: 1141: 1138: 1135: 1133:DEFINE_SPINLOCK 1132: 1129: 1126: 1123: 1120: 1117: 1114: 1113: 1110: 1107: 1104: 1101: 1098: 1095: 1092: 1089: 1086: 1083: 1080: 1077: 1074: 1071: 1068: 1065: 1062: 1059: 1056: 1053: 1050: 1047: 1044: 1041: 1038: 1035: 1032: 1029: 1026: 1023: 1020: 1017: 1014: 1011: 1008: 1005: 1002: 999: 996: 993: 990: 987: 984: 981: 978: 975: 972: 969: 966: 963: 960: 957: 950: 941:synchronize_rcu 940: 934:lock contention 921: 917: 909: 906:rcu_read_unlock 905: 901: 898: 897: 894: 891: 888: 885: 882: 879: 876: 873: 870: 867: 864: 861: 858: 852:rcu_dereference 851: 847: 844: 843: 840: 837: 834: 831: 828: 825: 822: 819: 816: 813: 810: 807: 804: 801: 798: 795: 792: 789: 786: 783: 780: 777: 774: 771: 768: 765: 762: 759: 756: 753: 750: 747: 744: 741: 738: 735: 733:synchronize_rcu 732: 729: 726: 723: 720: 717: 714: 711: 708: 705: 702: 699: 696: 693: 690: 687: 684: 681: 678: 675: 672: 669: 666: 663: 660: 657: 655:rcu_read_unlock 654: 651: 648: 645: 642: 639: 636: 633: 630: 620: 611: 608:synchronize_rcu 607: 603: 600:synchronize_rcu 599: 596:rcu_read_unlock 595: 591: 573:rcu_dereference 572: 568: 565:rcu_dereference 564: 560:rcu_dereference 559: 542: 534:synchronize_rcu 533: 530:synchronize_rcu 529: 525: 513:synchronize_rcu 512: 483: 465: 459: 453: 447: 441: 431: 429:software patent 422: 393: 372: 311:quiescent state 307:rcu_read_unlock 306: 302: 279: 272: 268: 264: 260: 256: 252: 248: 244: 240: 236: 232: 228: 224: 220:left to right. 205: 201: 197: 193: 189: 185: 173: 166: 114: 91: 83:synchronization 49:data structures 33:synchronization 17: 12: 11: 5: 4972: 4970: 4962: 4961: 4956: 4946: 4945: 4939: 4938: 4936: 4935: 4923: 4909: 4894: 4891: 4890: 4887: 4886: 4884: 4883: 4877: 4875: 4871: 4870: 4868: 4867: 4862: 4861: 4860: 4855: 4847: 4846: 4845: 4837: 4832: 4827: 4821: 4819: 4808: 4802: 4801: 4798: 4797: 4794: 4793: 4791: 4790: 4789: 4788: 4783: 4778: 4773: 4768: 4760: 4759: 4758: 4753: 4748: 4743: 4733: 4732: 4731: 4726: 4715: 4713: 4711:Virtualization 4704: 4703: 4702: 4701: 4696: 4685: 4684: 4683: 4678: 4673: 4668: 4658: 4657: 4656: 4651: 4646: 4636: 4635: 4634: 4629: 4618: 4616: 4612: 4611: 4609: 4608: 4603: 4598: 4593: 4588: 4583: 4577: 4576: 4571: 4570: 4569: 4564: 4557:Device drivers 4553: 4552: 4547: 4542: 4537: 4532: 4527: 4522: 4512: 4511: 4506: 4501: 4499:SCHED_DEADLINE 4496: 4494:O(1) scheduler 4491: 4489:O(n) scheduler 4486: 4484:Noop scheduler 4481: 4475: 4469: 4464: 4457: 4456: 4451: 4446: 4441: 4436: 4431: 4426: 4421: 4416: 4411: 4406: 4401: 4396: 4390: 4385: 4380: 4375: 4370: 4365: 4360: 4355: 4350: 4345: 4340: 4338:Kernel modules 4334: 4332: 4328: 4327: 4324: 4323: 4320: 4319: 4317: 4316: 4311: 4306: 4301: 4296: 4291: 4286: 4285: 4284: 4279: 4274: 4269: 4264: 4259: 4258: 4257: 4247: 4242: 4231: 4229: 4221: 4220: 4218: 4217: 4212: 4211: 4210: 4200: 4195: 4190: 4187: 4184: 4179: 4176: 4173: 4168: 4163: 4158: 4153: 4148: 4144: 4142: 4128: 4122: 4121: 4118: 4117: 4115: 4114: 4109: 4104: 4099: 4094: 4092:Memory barrier 4089: 4084: 4079: 4074: 4069: 4063: 4061: 4055: 4054: 4052: 4051: 4050: 4049: 4046: 4041: 4036: 4031: 4026: 4021: 4011: 4010: 4009: 4006: 4001: 3996: 3991: 3986: 3981: 3970: 3968: 3957: 3950: 3944: 3943: 3941: 3940: 3935: 3929: 3927: 3921: 3920: 3918: 3917: 3912: 3907: 3902: 3897: 3891: 3889: 3883: 3882: 3880: 3879: 3874: 3869: 3864: 3859: 3854: 3848: 3846: 3839: 3835: 3834: 3831: 3830: 3828: 3827: 3826: 3825: 3817: 3816: 3815: 3810: 3805: 3800: 3789: 3787: 3783: 3782: 3780: 3779: 3774: 3769: 3764: 3759: 3754: 3749: 3744: 3739: 3734: 3729: 3724: 3718: 3716: 3709: 3705: 3704: 3699: 3697: 3696: 3689: 3682: 3674: 3668: 3667: 3655: 3647: 3628: 3623: 3603: 3589: 3588:External links 3586: 3577: 3576: 3557: 3533: 3507: 3488:(2): 375–382. 3465: 3462:on 2009-07-17. 3434: 3408: 3382: 3358: 3339: 3318: 3301: 3282: 3258: 3239: 3194: 3170: 3144: 3118: 3094: 3068: 3044: 3018: 2991: 2976: 2942: 2897: 2861: 2823: 2816: 2786: 2771: 2745: 2731: 2710: 2695: 2669: 2634: 2628:Eddie Kohler. 2621: 2609: 2596: 2586:|journal= 2547: 2521: 2510:(2): 221–236. 2493: 2486: 2464: 2462: 2459: 2456: 2455: 2446: 2434: 2423: 2422: 2420: 2417: 2416: 2415: 2410: 2405: 2400: 2395: 2390: 2385: 2380: 2375: 2370: 2363: 2360: 2359: 2358: 2354: 2351: 2348: 2345: 2338: 2332: 2315: 2308: 2300: 2294: 2291:IBM mainframes 2283: 2276:Richard Rashid 2273: 2266: 2254: 2253: 2219: 2217: 2210: 2204: 2201: 956: 949: 946: 857: 629: 619: 616: 577: 576: 556: 553:memory barrier 547: 546: 538: 537: 522: 521: 520: 509: 506: 482: 479: 421: 418: 392: 389: 371: 368: 355: 354: 351: 348: 345: 165: 162: 122: 121: 118: 111: 108: 105: 98: 90: 87: 15: 13: 10: 9: 6: 4: 3: 2: 4971: 4960: 4957: 4955: 4952: 4951: 4949: 4934: 4933: 4924: 4922: 4921: 4910: 4908: 4907: 4902: 4896: 4895: 4892: 4882: 4879: 4878: 4876: 4872: 4866: 4863: 4859: 4856: 4854: 4851: 4850: 4848: 4844: 4841: 4840: 4839:Thin client: 4838: 4836: 4833: 4831: 4828: 4826: 4823: 4822: 4820: 4818: 4812: 4809: 4807: 4803: 4787: 4784: 4782: 4779: 4777: 4774: 4772: 4769: 4767: 4764: 4763: 4761: 4757: 4754: 4752: 4749: 4747: 4744: 4742: 4741:Linux-VServer 4739: 4738: 4737: 4734: 4730: 4727: 4725: 4722: 4721: 4720: 4717: 4716: 4714: 4712: 4708: 4700: 4697: 4695: 4692: 4691: 4689: 4686: 4682: 4679: 4677: 4674: 4672: 4669: 4667: 4664: 4663: 4662: 4659: 4655: 4652: 4650: 4647: 4645: 4642: 4641: 4640: 4637: 4633: 4630: 4628: 4625: 4624: 4623: 4620: 4619: 4617: 4613: 4607: 4604: 4602: 4599: 4597: 4594: 4592: 4589: 4587: 4584: 4582: 4579: 4578: 4575: 4572: 4568: 4565: 4563: 4560: 4559: 4558: 4555: 4554: 4551: 4548: 4546: 4543: 4541: 4538: 4536: 4533: 4531: 4528: 4526: 4523: 4521: 4517: 4514: 4513: 4510: 4507: 4505: 4502: 4500: 4497: 4495: 4492: 4490: 4487: 4485: 4482: 4479: 4476: 4473: 4470: 4468: 4465: 4462: 4459: 4458: 4455: 4452: 4450: 4447: 4445: 4442: 4440: 4437: 4435: 4432: 4430: 4427: 4425: 4422: 4420: 4417: 4415: 4412: 4410: 4407: 4405: 4402: 4400: 4397: 4394: 4391: 4389: 4386: 4384: 4381: 4379: 4376: 4374: 4371: 4369: 4366: 4364: 4363:Device mapper 4361: 4359: 4356: 4354: 4351: 4349: 4346: 4344: 4341: 4339: 4336: 4335: 4333: 4329: 4315: 4312: 4310: 4307: 4305: 4302: 4300: 4297: 4295: 4292: 4290: 4287: 4283: 4280: 4278: 4275: 4273: 4270: 4268: 4265: 4263: 4260: 4256: 4253: 4252: 4251: 4248: 4246: 4243: 4241: 4238: 4237: 4236: 4233: 4232: 4230: 4228: 4222: 4216: 4213: 4209: 4206: 4205: 4204: 4201: 4199: 4196: 4194: 4191: 4188: 4185: 4183: 4180: 4177: 4174: 4172: 4169: 4167: 4164: 4162: 4159: 4157: 4154: 4152: 4149: 4146: 4145: 4143: 4141: 4136: 4132: 4129: 4127: 4123: 4113: 4110: 4108: 4105: 4103: 4100: 4098: 4095: 4093: 4090: 4088: 4085: 4083: 4080: 4078: 4075: 4073: 4070: 4068: 4065: 4064: 4062: 4060: 4056: 4047: 4045: 4042: 4040: 4037: 4035: 4032: 4030: 4027: 4025: 4022: 4020: 4017: 4016: 4015: 4012: 4007: 4005: 4002: 4000: 3997: 3995: 3992: 3990: 3987: 3985: 3982: 3980: 3977: 3976: 3975: 3972: 3971: 3969: 3967: 3961: 3958: 3954: 3951: 3949: 3945: 3939: 3936: 3934: 3931: 3930: 3928: 3926: 3922: 3916: 3913: 3911: 3908: 3906: 3903: 3901: 3898: 3896: 3893: 3892: 3890: 3888: 3884: 3878: 3875: 3873: 3870: 3868: 3865: 3863: 3860: 3858: 3855: 3853: 3850: 3849: 3847: 3843: 3840: 3836: 3824: 3821: 3820: 3818: 3814: 3811: 3809: 3806: 3804: 3801: 3799: 3798: 3794: 3793: 3791: 3790: 3788: 3784: 3778: 3775: 3773: 3770: 3768: 3765: 3763: 3760: 3758: 3755: 3753: 3750: 3748: 3745: 3743: 3740: 3738: 3735: 3733: 3730: 3728: 3725: 3723: 3720: 3719: 3717: 3713: 3710: 3706: 3702: 3695: 3690: 3688: 3683: 3681: 3676: 3675: 3672: 3666: 3664: 3659: 3656: 3652: 3648: 3645: 3644: 3639: 3635: 3634: 3629: 3627: 3624: 3622: 3620: 3615: 3611: 3607: 3604: 3602: 3600: 3595: 3592: 3591: 3587: 3585: 3583: 3567: 3561: 3558: 3553: 3546: 3545: 3537: 3534: 3522: 3518: 3511: 3508: 3503: 3499: 3495: 3491: 3487: 3483: 3476: 3469: 3466: 3458: 3454: 3447: 3446: 3438: 3435: 3424:on 2012-03-31 3423: 3419: 3412: 3409: 3398:on 2012-03-31 3397: 3393: 3386: 3383: 3378: 3371: 3370: 3362: 3359: 3349: 3343: 3340: 3335: 3331: 3330: 3322: 3319: 3314: 3313: 3305: 3302: 3292: 3286: 3283: 3278: 3271: 3270: 3262: 3259: 3254: 3250: 3243: 3240: 3235: 3231: 3227: 3223: 3218: 3213: 3209: 3205: 3198: 3195: 3190: 3183: 3182: 3174: 3171: 3163:September 24, 3159: 3158:Linux Journal 3155: 3148: 3145: 3133: 3129: 3122: 3119: 3114: 3107: 3106: 3098: 3095: 3087:September 24, 3083: 3079: 3072: 3069: 3064: 3057: 3056: 3048: 3045: 3037:September 24, 3033: 3029: 3022: 3019: 3014: 3010: 3006: 3002: 2995: 2992: 2987: 2983: 2979: 2973: 2969: 2965: 2961: 2957: 2953: 2946: 2943: 2938: 2934: 2930: 2926: 2921: 2916: 2912: 2908: 2901: 2898: 2893: 2889: 2885: 2881: 2877: 2873: 2865: 2862: 2857: 2853: 2849: 2845: 2841: 2837: 2833: 2827: 2824: 2819: 2813: 2809: 2805: 2801: 2797: 2790: 2787: 2782: 2778: 2774: 2768: 2764: 2760: 2756: 2749: 2746: 2741: 2735: 2732: 2727: 2723: 2722: 2714: 2711: 2706: 2702: 2698: 2692: 2688: 2684: 2680: 2673: 2670: 2665: 2661: 2657: 2653: 2649: 2645: 2638: 2635: 2631: 2625: 2622: 2618: 2613: 2610: 2606: 2600: 2597: 2592: 2577: 2569: 2568: 2560: 2559: 2551: 2548: 2540:September 24, 2536: 2532: 2525: 2522: 2517: 2513: 2509: 2505: 2497: 2494: 2489: 2487:9781292061429 2483: 2479: 2472: 2470: 2466: 2460: 2450: 2447: 2443: 2438: 2435: 2428: 2425: 2418: 2414: 2411: 2409: 2406: 2404: 2401: 2399: 2396: 2394: 2391: 2389: 2386: 2384: 2381: 2379: 2376: 2374: 2373:Copy-on-write 2371: 2369: 2366: 2365: 2361: 2355: 2352: 2349: 2346: 2343: 2339: 2336: 2335:Rusty Russell 2333: 2330: 2327: 2323: 2320: 2316: 2313: 2309: 2306: 2301: 2298: 2295: 2292: 2288: 2284: 2281: 2277: 2274: 2270: 2267: 2264: 2261: 2260: 2259: 2250: 2241:is available. 2240: 2236: 2230: 2229: 2225: 2220:This section 2218: 2209: 2208: 2202: 2200: 2177: 2173: 2168:precedes the 2158:rcu_read_lock 1318:rcu_read_lock 1118:DEFINE_RWLOCK 954: 947: 945: 937: 935: 931: 927: 922:rcu_read_lock 918:ACCESS_ONCE() 915: 902:rcu_read_lock 855: 634:rcu_read_lock 627: 625: 617: 615: 592:rcu_read_lock 588: 581: 557: 554: 549: 548: 540: 539: 527: 526: 518: 510: 507: 504: 503: 502: 500: 494: 492: 488: 480: 478: 476: 473: 468: 462: 456: 450: 444: 439: 434: 430: 427: 419: 417: 414: 410: 408: 404: 399: 390: 388: 386: 385:Dragonfly BSD 382: 378: 369: 367: 364: 359: 352: 349: 346: 343: 342: 341: 338: 334: 332: 327: 323: 318: 316: 312: 303:rcu_read_lock 300: 295: 291: 289: 285: 276: 221: 213: 209: 182: 170: 163: 161: 160:programmers. 159: 155: 151: 147: 143: 139: 135: 131: 127: 119: 112: 109: 106: 103: 99: 96: 95: 94: 88: 86: 84: 80: 75: 73: 72:null pointers 69: 68:shared memory 64: 62: 58: 54: 50: 46: 42: 38: 34: 30: 26: 22: 4930: 4911: 4897: 4627:Linux kernel 4545:Tomoyo Linux 4140:File systems 4101: 3795: 3747:SCO disputes 3708:Organization 3701:Linux kernel 3661: 3641: 3631: 3617: 3597: 3579: 3560: 3551: 3543: 3536: 3526:November 17, 3524:. Retrieved 3510: 3485: 3481: 3468: 3457:the original 3452: 3444: 3437: 3426:. Retrieved 3422:the original 3411: 3400:. Retrieved 3396:the original 3385: 3376: 3368: 3361: 3342: 3333: 3328: 3321: 3311: 3304: 3285: 3276: 3268: 3261: 3252: 3248: 3242: 3207: 3203: 3197: 3188: 3180: 3173: 3161:. Retrieved 3147: 3137:December 26, 3135:. Retrieved 3121: 3112: 3104: 3097: 3085:. Retrieved 3071: 3062: 3054: 3047: 3035:. Retrieved 3021: 3004: 3000: 2994: 2951: 2945: 2913:(2): 34–42. 2910: 2906: 2900: 2875: 2871: 2864: 2842:(2): 34–42. 2839: 2835: 2826: 2799: 2795: 2789: 2754: 2748: 2734: 2725: 2720: 2713: 2678: 2672: 2647: 2643: 2637: 2624: 2612: 2599: 2565: 2557: 2550: 2538:. Retrieved 2524: 2507: 2503: 2496: 2477: 2449: 2437: 2427: 2326:IBM Research 2305:Van Jacobson 2297:William Pugh 2257: 2244: 2239:Editing help 2221: 2195:in place of 2178: 2174: 2155: 2084:write_unlock 1957:write_unlock 1931:list_del_rcu 951: 938: 899: 845: 621: 589: 586: 516: 495: 487:Linux kernel 484: 423: 415: 411: 409:conditions. 394: 373: 360: 356: 339: 335: 330: 325: 321: 319: 315:grace period 314: 310: 298: 296: 292: 288:transactions 277: 237:list_del_rcu 222: 218: 183: 179: 149: 141: 137: 133: 129: 125: 123: 92: 76: 65: 53:linked lists 28: 24: 18: 4632:Linux-libre 4525:Exec Shield 4404:Framebuffer 4107:Video4Linux 3964:System Call 3792:Developers 3732:Linus's law 2650:(5): 4–17. 2102:spin_unlock 1975:spin_unlock 1582:read_unlock 1505:read_unlock 892:(_value); \ 862:smp_wmb(); 326:reclamation 255:or element 150:generations 61:hash tables 4948:Categories 4719:Hypervisor 4681:PREEMPT_RT 4586:KernelCare 4574:Raw device 4504:SCHED_FIFO 4414:KMS driver 4331:Components 4186:securityfs 4072:Crypto API 4014:Linux-only 3900:System.map 3803:kernel.org 3762:menuconfig 3757:GNU GPL v2 3566:US 7099932 3428:2010-10-01 3402:2010-10-01 3348:US 5442758 3291:US 4809168 3210:(3): 354. 2461:References 2269:Udi Manber 2263:H. T. Kung 1743:write_lock 1057:spinlock_t 1045:spinlock_t 900:Note that 472:SCO v. IBM 4858:LYME-LYCE 4581:initramfs 4550:Linux PAM 4419:Netfilter 4289:libcgroup 4255:libhybris 4227:libraries 4175:hugetlbfs 4126:Userspace 4059:In-kernel 4044:readahead 3966:Interface 3915:initramfs 3872:SystemTap 3845:Debugging 3838:Technical 3777:Criticism 3212:CiteSeerX 3191:(Thesis). 3065:(Thesis). 2915:CiteSeerX 2312:DYNIX/ptx 2111:listmutex 2093:listmutex 1984:listmutex 1966:listmutex 1770:listmutex 1761:spin_lock 1752:listmutex 1591:listmutex 1514:listmutex 1309:listmutex 1300:read_lock 1164:LIST_HEAD 1149:LIST_HEAD 1139:listmutex 1124:listmutex 1009:list_head 994:list_head 961:/* RCU */ 914:DEC Alpha 4932:Category 4874:Adopters 4849:Server: 4830:Embedded 4806:Adoption 4699:PSXLinux 4622:Mainline 4615:Variants 4567:graphics 4520:AppArmor 4509:SCHED_RR 4429:nftables 4373:dm-crypt 4368:dm-cache 4314:liburing 4304:libevdev 4262:dietlibc 4151:configfs 4077:io uring 3234:13007648 2705:17493674 2664:12748421 2362:See also 2272:threads. 2247:May 2014 2189:call_rcu 1907:list_del 926:deadlock 823:callback 811:call_rcu 772:each_cpu 691:callback 676:call_rcu 612:call_rcu 604:call_rcu 543:call_rcu 407:livelock 403:deadlock 142:MP defer 45:pointers 4865:Devices 4825:Desktop 4786:coLinux 4781:MkLinux 4766:L4Linux 4694:ÎĽClinux 4676:Xenomai 4666:RTLinux 4606:Ksplice 4535:SELinux 4530:seccomp 4480:(EEVDF) 4424:Netlink 4353:Console 4348:cgroups 4299:libalsa 4225:Wrapper 4203:systemd 4166:debugfs 4135:Daemons 4097:New API 4039:inotify 4034:dnotify 3938:x32 ABI 3895:vmlinux 3887:Startup 3786:Support 2937:3030814 2781:2465311 2203:History 491:liburcu 475:lawsuit 420:Patents 331:reclaim 322:removal 284:locking 158:Tornado 130:copying 102:pointer 51:(e.g., 41:threads 31:) is a 4835:Gaming 4817:of use 4771:ELinOS 4762:Other 4756:OpenVZ 4746:Lguest 4690:-less 4601:kpatch 4596:kGraft 4562:802.11 4358:bcache 4309:libusb 4294:libdrm 4282:Newlib 4267:EGLIBC 4250:Bionic 4245:uClibc 4215:Kmscon 4189:sockfs 4182:procfs 4178:pipefs 4161:devpts 4087:kernfs 4029:splice 3984:select 3956:Kernel 3910:initrd 3905:dracut 3857:ftrace 3819:Users 3752:Linaro 3715:Kernel 3612:, and 3572:  3502:832767 3500:  3354:  3297:  3232:  3214:  2984:  2974:  2935:  2917:  2892:931202 2890:  2856:669053 2854:  2814:  2779:  2769:  2703:  2693:  2662:  2484:  2432:phase. 2222:is in 2185:delete 2133:return 2121:return 2047:return 2035:return 1718:struct 1700:struct 1670:delete 1649:delete 1622:return 1610:return 1545:return 1533:return 1483:result 1459:result 1275:struct 1257:struct 1236:result 1215:search 1203:result 1182:search 1006:struct 991:struct 979:struct 967:struct 602:, and 528:Since 231:, and 134:update 4815:Range 4654:SLURM 4591:kexec 4540:Smack 4474:(CFS) 4454:zswap 4395:(KSM) 4388:evdev 4343:BlueZ 4272:klibc 4240:glibc 4198:tmpfs 4193:sysfs 4156:devfs 4147:bpffs 4024:epoll 4019:futex 3999:close 3979:ioctl 3974:POSIX 3862:kdump 3548:(PDF) 3498:S2CID 3478:(PDF) 3460:(PDF) 3449:(PDF) 3373:(PDF) 3273:(PDF) 3230:S2CID 3185:(PDF) 3109:(PDF) 3059:(PDF) 2986:28504 2982:S2CID 2933:S2CID 2888:S2CID 2852:S2CID 2777:S2CID 2701:S2CID 2660:S2CID 2562:(PDF) 2419:Notes 2287:VM/XA 2228:prose 2170:kfree 2108:& 2090:& 2020:kfree 2005:kfree 1981:& 1963:& 1943:-> 1937:& 1919:-> 1913:& 1885:-> 1855:-> 1825:& 1792:& 1767:& 1749:& 1588:& 1511:& 1492:-> 1468:-> 1435:-> 1405:-> 1374:& 1341:& 1306:& 1060:mutex 1048:mutex 832:-> 829:entry 820:-> 817:entry 802:entry 757:ncpus 515:will 146:VM/XA 57:trees 4853:LAMP 4843:LTSP 4671:RTAI 4449:zram 4444:SLUB 4439:perf 4383:EDAC 4277:musl 4208:udev 4171:FUSE 4067:ALSA 4004:sync 3994:read 3989:open 3948:APIs 3925:ABIs 3852:CRIU 3808:LKML 3528:2013 3255:(3). 3165:2010 3139:2010 3089:2010 3039:2010 2972:ISBN 2812:ISBN 2767:ISBN 2691:ISBN 2591:help 2542:2010 2482:ISBN 2224:list 2160:and 1828:head 1795:head 1676:long 1655:long 1495:data 1471:data 1377:head 1344:head 1221:long 1188:long 1170:head 1155:head 1084:data 1072:data 1033:long 1021:long 904:and 850:and 814:list 799:each 739:void 730:void 709:void 700:void 682:void 673:void 661:void 652:void 640:void 631:void 426:U.S. 405:and 370:Uses 324:and 305:and 202:NULL 194:gptr 190:NULL 186:gptr 174:gptr 156:and 140:and 126:read 37:lock 4751:LXC 4729:Xen 4724:KVM 4688:MMU 4644:INK 4409:LVM 4399:LIO 4378:DRM 4112:IIO 4102:RCU 4082:DRM 3877:BPF 3742:Tux 3636:An 3490:doi 3222:doi 3009:doi 2964:hdl 2956:doi 2925:doi 2880:doi 2844:doi 2804:doi 2759:doi 2683:doi 2652:doi 2512:doi 2329:K42 2289:on 1998:(); 1894:key 1888:key 1864:key 1858:key 1679:key 1667:int 1658:key 1646:int 1603:(); 1526:(); 1444:key 1438:key 1414:key 1408:key 1321:(); 1230:int 1224:key 1212:int 1197:int 1191:key 1179:int 1081:int 1069:int 1036:key 1024:key 835:arg 808:the 796:for 790:cpu 778:cpu 769:for 751:cpu 748:int 715:arg 517:not 398:SMP 377:K42 286:or 154:K42 152:by 144:by 74:). 63:). 29:RCU 19:In 4950:: 4518:: 3660:. 3616:. 3608:, 3596:. 3584:) 3550:. 3519:. 3496:. 3486:23 3484:. 3480:. 3451:. 3375:. 3332:. 3275:. 3251:. 3228:. 3220:. 3206:. 3187:. 3156:. 3130:. 3111:. 3080:. 3061:. 3030:. 3005:67 3003:. 2980:. 2970:. 2962:. 2931:. 2923:. 2911:25 2909:. 2886:. 2876:25 2874:. 2850:. 2840:40 2838:. 2810:. 2798:. 2775:. 2765:. 2724:. 2699:. 2689:. 2658:. 2648:42 2646:. 2580:: 2578:}} 2574:{{ 2564:. 2533:. 2508:47 2506:. 2468:^ 2172:. 2148:17 2142:16 2130:16 2118:15 2114:); 2099:15 2096:); 2081:14 2074:14 2068:13 2062:13 2056:12 2044:12 2032:11 2029:); 2017:11 2014:); 2002:10 1992:10 1987:); 1969:); 1949:); 1946:lp 1925:); 1922:lp 1891:== 1876:if 1861:== 1846:if 1834:lp 1801:lp 1773:); 1755:); 1721:el 1703:el 1637:15 1631:15 1619:14 1607:14 1597:13 1594:); 1579:13 1572:12 1566:12 1560:11 1554:11 1542:10 1530:10 1517:); 1441:== 1426:if 1411:== 1396:if 1383:lp 1350:lp 1312:); 1278:el 1260:el 1173:); 1158:); 1142:); 1127:); 1111:}; 1105:}; 1012:lp 997:lp 982:el 970:el 895:}) 874:}) 838:); 805:in 793:); 706:), 626:. 598:, 594:, 477:. 227:, 59:, 55:, 23:, 4463:: 4137:, 4048:… 4008:… 3693:e 3686:t 3679:v 3665:. 3621:. 3601:. 3554:. 3530:. 3504:. 3492:: 3431:. 3405:. 3379:. 3336:. 3253:9 3236:. 3224:: 3208:5 3167:. 3141:. 3115:. 3091:. 3041:. 3015:. 3011:: 2988:. 2966:: 2958:: 2939:. 2927:: 2894:. 2882:: 2858:. 2846:: 2820:. 2806:: 2783:. 2761:: 2742:. 2728:. 2707:. 2685:: 2666:. 2654:: 2619:. 2607:. 2593:) 2589:( 2544:. 2518:. 2514:: 2490:. 2293:. 2249:) 2245:( 2231:. 2151:} 2145:} 2139:; 2136:0 2127:; 2124:0 2105:( 2087:( 2077:} 2071:} 2065:} 2059:} 2053:; 2050:1 2041:; 2038:1 2026:p 2023:( 2011:p 2008:( 1978:( 1972:9 1960:( 1954:9 1940:p 1934:( 1928:8 1916:p 1910:( 1904:8 1900:{ 1897:) 1882:p 1879:( 1873:7 1870:{ 1867:) 1852:p 1849:( 1843:7 1840:{ 1837:) 1831:, 1822:, 1819:p 1816:( 1810:6 1807:{ 1804:) 1798:, 1789:, 1786:p 1783:( 1777:6 1764:( 1758:5 1746:( 1740:5 1736:4 1733:4 1730:; 1727:p 1724:* 1715:3 1712:; 1709:p 1706:* 1697:3 1694:{ 1691:2 1688:{ 1685:2 1682:) 1673:( 1664:1 1661:) 1652:( 1643:1 1640:} 1634:} 1628:; 1625:0 1616:; 1613:0 1585:( 1575:} 1569:} 1563:} 1557:} 1551:; 1548:1 1539:; 1536:1 1520:9 1508:( 1502:9 1498:; 1489:p 1486:= 1480:* 1477:8 1474:; 1465:p 1462:= 1456:* 1453:8 1450:{ 1447:) 1432:p 1429:( 1423:7 1420:{ 1417:) 1402:p 1399:( 1393:7 1389:{ 1386:) 1380:, 1371:, 1368:p 1365:( 1359:6 1356:{ 1353:) 1347:, 1338:, 1335:p 1332:( 1326:6 1315:5 1303:( 1297:5 1293:4 1290:4 1287:; 1284:p 1281:* 1272:3 1269:; 1266:p 1263:* 1254:3 1251:{ 1248:2 1245:{ 1242:2 1239:) 1233:* 1227:, 1218:( 1209:1 1206:) 1200:* 1194:, 1185:( 1176:1 1167:( 1161:9 1152:( 1146:9 1136:( 1130:8 1121:( 1115:8 1108:7 1102:7 1096:6 1090:6 1087:; 1078:5 1075:; 1066:5 1063:; 1054:4 1051:; 1042:4 1039:; 1030:3 1027:; 1018:3 1015:; 1003:2 1000:; 988:2 985:{ 976:1 973:{ 964:1 889:\ 868:\ 841:} 826:( 787:( 781:) 775:( 766:; 763:0 760:= 754:, 745:{ 742:) 736:( 727:} 721:{ 718:) 712:* 703:* 697:( 694:) 688:* 685:( 679:( 670:} 667:{ 664:) 658:( 649:} 646:{ 643:) 637:( 497:( 280:B 273:B 269:B 265:B 261:B 257:C 253:B 249:A 245:B 241:B 233:C 229:B 225:A 117:, 27:(

Index

computer science
synchronization
lock
threads
pointers
data structures
linked lists
trees
hash tables
shared memory
null pointers
space–time tradeoff
synchronization
pointer
VM/XA
K42
Tornado


locking
transactions
non-blocking algorithm
K42
software transactional memory
Dragonfly BSD
SMP
deadlock
livelock
U.S.
software patent

Text is available under the Creative Commons Attribution-ShareAlike License. Additional terms may apply.

↑