{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,3,14]],"date-time":"2026-03-14T09:51:53Z","timestamp":1773481913754,"version":"3.50.1"},"reference-count":53,"publisher":"Association for Computing Machinery (ACM)","issue":"1","license":[{"start":{"date-parts":[[2020,8,31]],"date-time":"2020-08-31T00:00:00Z","timestamp":1598832000000},"content-version":"vor","delay-in-days":0,"URL":"https:\/\/www.acm.org\/publications\/policies\/copyright_policy#Background"}],"content-domain":{"domain":["dl.acm.org"],"crossmark-restriction":true},"short-container-title":["SIGOPS Oper. Syst. Rev."],"published-print":{"date-parts":[[2020,8,31]]},"abstract":"<jats:p>Read-copy update (RCU) is a scalable high-performance synchronization mechanism implemented in the Linux kernel. RCU's novel properties include support for concurrent forward progress for readers and writers as well as highly optimized inter-CPU synchronization. RCU was introduced into the Linux kernel eighteen years ago and most subsystems now use RCU. This paper discusses the requirements that drove the development of RCU, the design and API of the Linux RCU implementation, and how kernel developers apply RCU.<\/jats:p>","DOI":"10.1145\/3421473.3421481","type":"journal-article","created":{"date-parts":[[2020,8,31]],"date-time":"2020-08-31T13:31:19Z","timestamp":1598880679000},"page":"47-63","update-policy":"https:\/\/doi.org\/10.1145\/crossmark-policy","source":"Crossref","is-referenced-by-count":7,"title":["RCU Usage In the Linux Kernel"],"prefix":"10.1145","volume":"54","author":[{"given":"Paul E.","family":"McKenney","sequence":"first","affiliation":[{"name":"Facebook"}]},{"given":"Joel","family":"Fernandes","sequence":"additional","affiliation":[{"name":"Google"}]},{"given":"Silas","family":"Boyd-Wickizer","sequence":"additional","affiliation":[{"name":"MIT CSAIL"}]},{"given":"Jonathan","family":"Walpole","sequence":"additional","affiliation":[{"name":"Portland State University"}]}],"member":"320","published-online":{"date-parts":[[2020,8,31]]},"reference":[{"key":"e_1_2_1_1_1","doi-asserted-by":"publisher","DOI":"10.1145\/3296957.3177156"},{"key":"e_1_2_1_2_1","doi-asserted-by":"publisher","DOI":"10.1145\/2611462.2611471"},{"key":"e_1_2_1_3_1","doi-asserted-by":"publisher","DOI":"10.1145\/2858788.2688518"},{"key":"e_1_2_1_4_1","first-page":"297","volume-title":"Proceedings of the 2003 USENIX Annual Tech- nical Conference (FREENIX Track) (June","author":"ARCANGELI A.","year":"2003"},{"key":"e_1_2_1_5_1","unstructured":"ASH M. Concurrent memory deallocation in the objective-c runtime. mikeash.com: just this guy you know? May 2015.  ASH M. Concurrent memory deallocation in the objective-c runtime. mikeash.com: just this guy you know? May 2015."},{"key":"e_1_2_1_6_1","unstructured":"BAHRA S. A. ck_epoch: Support perobject destructors. https:\/\/github. com\/concurrencykit\/ck\/commit\/ 10ffb2e6f1737a30e2dcf3862d105ad45fcd60a4 October 2011.  BAHRA S. A. ck_epoch: Support perobject destructors. https:\/\/github. com\/concurrencykit\/ck\/commit\/ 10ffb2e6f1737a30e2dcf3862d105ad45fcd60a4 October 2011."},{"key":"e_1_2_1_7_1","unstructured":"BAHRA S. A. ck_hp.c. Hazard pointers: https:\/\/github.com\/concurrencykit\/ ck\/blob\/master\/src\/ck_hp.c February 2011.  BAHRA S. A. ck_hp.c. Hazard pointers: https:\/\/github.com\/concurrencykit\/ ck\/blob\/master\/src\/ck_hp.c February 2011."},{"key":"e_1_2_1_8_1","unstructured":"BHAT S. S. percpu_rwlock: Implement the core design of per-CPU reader-writer locks. https: \/\/patchwork.kernel.org\/patch\/2157401\/ February 2014.  BHAT S. S. percpu_rwlock: Implement the core design of per-CPU reader-writer locks. https: \/\/patchwork.kernel.org\/patch\/2157401\/ February 2014."},{"key":"e_1_2_1_9_1","unstructured":"BONZINI P. AND DAY M. RCU implementation for Qemu. http:\/\/lists.gnu.org\/archive\/ html\/qemu-devel\/2013-08\/msg02055.html August 2013.  BONZINI P. AND DAY M. RCU implementation for Qemu. http:\/\/lists.gnu.org\/archive\/ html\/qemu-devel\/2013-08\/msg02055.html August 2013."},{"key":"e_1_2_1_10_1","unstructured":"BOSTIC K. Switch lockless programming style from epoch to hazard references. https:\/\/github. com\/wiredtiger\/wiredtiger\/commit\/ dddc21014fc494a956778360a14d96c762495e09 January 2010. 60  BOSTIC K. Switch lockless programming style from epoch to hazard references. https:\/\/github. com\/wiredtiger\/wiredtiger\/commit\/ dddc21014fc494a956778360a14d96c762495e09 January 2010. 60"},{"key":"e_1_2_1_11_1","doi-asserted-by":"publisher","DOI":"10.5555\/1924943.1924944"},{"key":"e_1_2_1_12_1","unstructured":"COMPAQ COMPUTER CORPORATION. Shared memory threads interprocess communication. Available: http:\/\/h71000.www7.hp.com\/ wizard\/wiz_2637.html August 2001.  COMPAQ COMPUTER CORPORATION. Shared memory threads interprocess communication. Available: http:\/\/h71000.www7.hp.com\/ wizard\/wiz_2637.html August 2001."},{"key":"e_1_2_1_13_1","doi-asserted-by":"publisher","DOI":"10.1109\/TPDS.2011.159"},{"key":"e_1_2_1_14_1","doi-asserted-by":"publisher","DOI":"10.1145\/1233307.1233309"},{"key":"e_1_2_1_15_1","doi-asserted-by":"publisher","DOI":"10.5555\/296806.296814"},{"key":"e_1_2_1_16_1","unstructured":"GOTSMAN A. RINETZKY N. AND YANG H. Verifying highly concurrent algorithms with grace (extended version). http:\/\/software.imdea.org\/~gotsman\/ papers\/recycling-esop13-ext.pdf July 2012.  GOTSMAN A. RINETZKY N. AND YANG H. Verifying highly concurrent algorithms with grace (extended version). http:\/\/software.imdea.org\/~gotsman\/ papers\/recycling-esop13-ext.pdf July 2012."},{"key":"e_1_2_1_17_1","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-642-37036-6_15"},{"key":"e_1_2_1_18_1","doi-asserted-by":"publisher","DOI":"10.1145\/248155.238767"},{"key":"e_1_2_1_19_1","doi-asserted-by":"publisher","DOI":"10.1147\/sj.472.0221"},{"key":"e_1_2_1_20_1","unstructured":"GWYNNE D. introduce srp which according to the manpage i wrote is short for \"shared reference pointers\". https:\/\/github.com\/openbsd\/src\/ blob\/HEAD\/sys\/kern\/kern_srp.c July 2015.  GWYNNE D. introduce srp which according to the manpage i wrote is short for \"shared reference pointers\". https:\/\/github.com\/openbsd\/src\/ blob\/HEAD\/sys\/kern\/kern_srp.c July 2015."},{"key":"e_1_2_1_21_1","doi-asserted-by":"publisher","DOI":"10.1016\/j.jpdc.2007.04.010"},{"key":"e_1_2_1_23_1","doi-asserted-by":"publisher","DOI":"10.5555\/2001252.2001267"},{"key":"e_1_2_1_24_1","unstructured":"JACOBSON V. Avoid read-side locking via delayed free. private communication September 1993.  JACOBSON V. Avoid read-side locking via delayed free. private communication September 1993."},{"key":"e_1_2_1_25_1","first-page":"11","volume-title":"USENIX","author":"JOHN A.","year":"1995"},{"key":"e_1_2_1_26_1","unstructured":"KHIZHINSKY M. Memory management schemes. https:\/\/kukuruku.co\/post\/lock-freedata- structures-the-inside-memorymanagement- schemes\/ June 2014.  KHIZHINSKY M. Memory management schemes. https:\/\/kukuruku.co\/post\/lock-freedata- structures-the-inside-memorymanagement- schemes\/ June 2014."},{"key":"e_1_2_1_27_1","doi-asserted-by":"publisher","DOI":"10.1145\/3297858.3304040"},{"key":"e_1_2_1_28_1","unstructured":"KIVITY A. rcu: add basic read-copyupdate implementation. https:\/\/github. com\/cloudius-systems\/osv\/commit\/ 94b69794fb9e6c99d78ca9a58ddaee1c31256b43 August 2013.  KIVITY A. rcu: add basic read-copyupdate implementation. https:\/\/github. com\/cloudius-systems\/osv\/commit\/ 94b69794fb9e6c99d78ca9a58ddaee1c31256b43 August 2013."},{"key":"e_1_2_1_29_1","volume-title":"National Technical University of Athens","author":"KOKOLOGIANNAKIS M.","year":"2017"},{"key":"e_1_2_1_30_1","doi-asserted-by":"publisher","DOI":"10.1145\/320613.320619"},{"key":"e_1_2_1_31_1","volume-title":"Cornell University Library","author":"LIANG L.","year":"2016"},{"key":"e_1_2_1_32_1","doi-asserted-by":"publisher","DOI":"10.5555\/2643634.2643658"},{"key":"e_1_2_1_33_1","doi-asserted-by":"publisher","DOI":"10.1145\/2815400.2815406"},{"key":"e_1_2_1_34_1","first-page":"2006","author":"MCKENNEY P. E.","year":"2007","journal-title":"Viewed"},{"key":"e_1_2_1_35_1","unstructured":"MCKENNEY P. E. RCU requirements part 2 - parallelism and software engineering. http:\/\/lwn. net\/Articles\/652677\/ August 2015.  MCKENNEY P. E. RCU requirements part 2 - parallelism and software engineering. http:\/\/lwn. net\/Articles\/652677\/ August 2015."},{"key":"e_1_2_1_36_1","unstructured":"MCKENNEY P. E. Requirements for RCU part 1: the fundamentals. http:\/\/lwn.net\/Articles\/ 652156\/ July 2015.  MCKENNEY P. E. Requirements for RCU part 1: the fundamentals. http:\/\/lwn.net\/Articles\/ 652156\/ July 2015."},{"key":"e_1_2_1_37_1","volume-title":"USA","author":"MCKENNEY P. E.","year":"2019"},{"key":"e_1_2_1_38_1","doi-asserted-by":"publisher","DOI":"10.5555\/959336.959339"},{"key":"e_1_2_1_39_1","first-page":"509","volume-title":"NV","author":"MCKENNEY P. E.","year":"1998"},{"key":"e_1_2_1_40_1","unstructured":"MICHAEL M. Rewrite from experimental use of deterministic schedule improvements. Hazard pointers: https: \/\/github.com\/facebook\/folly\/commit\/ d42832d2a529156275543c7fa7183e1321df605d June 2018.  MICHAEL M. Rewrite from experimental use of deterministic schedule improvements. Hazard pointers: https: \/\/github.com\/facebook\/folly\/commit\/ d42832d2a529156275543c7fa7183e1321df605d June 2018."},{"key":"e_1_2_1_41_1","doi-asserted-by":"publisher","DOI":"10.1109\/TPDS.2004.8"},{"key":"e_1_2_1_42_1","unstructured":"MORRIS J. [PATCH 2\/3] SELinux scalability - convert AVC to RCU. http: \/\/marc.theaimsgroup.com\/?l=linuxkernel& m=110054979416004&w=2 November 2004.  MORRIS J. [PATCH 2\/3] SELinux scalability - convert AVC to RCU. http: \/\/marc.theaimsgroup.com\/?l=linuxkernel& m=110054979416004&w=2 November 2004."},{"key":"e_1_2_1_43_1","unstructured":"NESTEROV O. AND ZIJLSTRA P. rcu: Create rcu_sync infrastructure. https: \/\/lore.kernel.org\/lkml\/20131002150518. 675931976@infradead.org\/ October 2013.  NESTEROV O. AND ZIJLSTRA P. rcu: Create rcu_sync infrastructure. https: \/\/lore.kernel.org\/lkml\/20131002150518. 675931976@infradead.org\/ October 2013."},{"key":"e_1_2_1_44_1","volume-title":"Charles University in Prague, 2010","author":"PODZIMEK A.","year":"2011"},{"key":"e_1_2_1_45_1","unstructured":"RAMALHETE P. AND CORREIA A. Poor man's rcu. https:\/\/github.com\/pramalhe\/ ConcurrencyFreaks\/blob\/master\/papers\/ poormanurcu-2015.pdf August 2015.  RAMALHETE P. AND CORREIA A. Poor man's rcu. https:\/\/github.com\/pramalhe\/ ConcurrencyFreaks\/blob\/master\/papers\/ poormanurcu-2015.pdf August 2015."},{"key":"e_1_2_1_46_1","unstructured":"ROMER G. AND HUNTER A. An RAII interface for deferred reclamation. Available: http:\/\/www.open-std.org\/jtc1\/sc22\/ wg21\/docs\/papers\/2017\/p0561r0.html [Viewed May 29 2017] February 2017.  ROMER G. AND HUNTER A. An RAII interface for deferred reclamation. Available: http:\/\/www.open-std.org\/jtc1\/sc22\/ wg21\/docs\/papers\/2017\/p0561r0.html [Viewed May 29 2017] February 2017."},{"key":"e_1_2_1_47_1","unstructured":"ROY L. rcutorture: Add CBMC-based formal verification for SRCU. URL: https:\/\/www.spinics. net\/lists\/kernel\/msg2421833.html January 2017.  ROY L. rcutorture: Add CBMC-based formal verification for SRCU. URL: https:\/\/www.spinics. net\/lists\/kernel\/msg2421833.html January 2017."},{"key":"e_1_2_1_48_1","doi-asserted-by":"publisher","DOI":"10.5555\/1247415.1247447"},{"key":"e_1_2_1_49_1","unstructured":"SHENOY G. R. [patch 4\/5] lock_cpu_hotplug: Redesign - lightweight implementation of lock_cpu_hotplug. Available: http: \/\/lkml.org\/lkml\/2006\/10\/26\/73 [Viewed January 26 2009] October 2006.  SHENOY G. R. [patch 4\/5] lock_cpu_hotplug: Redesign - lightweight implementation of lock_cpu_hotplug. Available: http: \/\/lkml.org\/lkml\/2006\/10\/26\/73 [Viewed January 26 2009] October 2006."},{"key":"e_1_2_1_50_1","doi-asserted-by":"publisher","DOI":"10.1145\/2426642.2259005"},{"key":"e_1_2_1_51_1","unstructured":"THE NETBSD FOUNDATION. pserialize(9). http:\/\/netbsd.gw.com\/cgi-bin\/mancgi? pserialize+9+NetBSD-current October 2012.  THE NETBSD FOUNDATION. pserialize(9). http:\/\/netbsd.gw.com\/cgi-bin\/mancgi? pserialize+9+NetBSD-current October 2012."},{"key":"e_1_2_1_52_1","unstructured":"TORVALDS L. Linux 2.5.43. Available: http:\/\/lkml.org\/lkml\/2002\/10\/15\/425 [Viewed March 30 2008] October 2002.  TORVALDS L. Linux 2.5.43. Available: http:\/\/lkml.org\/lkml\/2002\/10\/15\/425 [Viewed March 30 2008] October 2002."},{"key":"e_1_2_1_53_1","unstructured":"TORVALDS L. Linux 2.6.38-rc1. Available: https:\/\/lkml.org\/lkml\/2011\/1\/18\/322 [Viewed March 4 2011] January 2011.  TORVALDS L. Linux 2.6.38-rc1. Available: https:\/\/lkml.org\/lkml\/2011\/1\/18\/322 [Viewed March 4 2011] January 2011."},{"key":"e_1_2_1_54_1","unstructured":"ZIJLSTRA P. [PATCH] cgroup: avoid synchronize_ sched in __cgroup_procswrite. https: \/\/lore.kernel.org\/lkml\/20160811165413. GA22807@redhat.com\/ August 2016.  ZIJLSTRA P. [PATCH] cgroup: avoid synchronize_ sched in __cgroup_procswrite. https: \/\/lore.kernel.org\/lkml\/20160811165413. GA22807@redhat.com\/ August 2016."}],"container-title":["ACM SIGOPS Operating Systems Review"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3421473.3421481","content-type":"unspecified","content-version":"vor","intended-application":"text-mining"},{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/3421473.3421481","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2025,6,18]],"date-time":"2025-06-18T17:49:21Z","timestamp":1750268961000},"score":1,"resource":{"primary":{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3421473.3421481"}},"subtitle":["Eighteen Years Later"],"short-title":[],"issued":{"date-parts":[[2020,8,31]]},"references-count":53,"journal-issue":{"issue":"1","published-print":{"date-parts":[[2020,8,31]]}},"alternative-id":["10.1145\/3421473.3421481"],"URL":"https:\/\/doi.org\/10.1145\/3421473.3421481","relation":{},"ISSN":["0163-5980"],"issn-type":[{"value":"0163-5980","type":"print"}],"subject":[],"published":{"date-parts":[[2020,8,31]]},"assertion":[{"value":"2020-08-31","order":2,"name":"published","label":"Published","group":{"name":"publication_history","label":"Publication History"}}]}}