{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2025,6,18]],"date-time":"2025-06-18T04:32:47Z","timestamp":1750221167688,"version":"3.41.0"},"reference-count":49,"publisher":"Association for Computing Machinery (ACM)","issue":"4","license":[{"start":{"date-parts":[[2017,12,31]],"date-time":"2017-12-31T00:00:00Z","timestamp":1514678400000},"content-version":"vor","delay-in-days":0,"URL":"https:\/\/www.acm.org\/publications\/policies\/copyright_policy#Background"}],"funder":[{"DOI":"10.13039\/501100001711","name":"Schweizerischer Nationalfonds zur F\u00f6rderung der Wissenschaftlichen Forschung","doi-asserted-by":"publisher","award":["PZ00P2_161375"],"award-info":[{"award-number":["PZ00P2_161375"]}],"id":[{"id":"10.13039\/501100001711","id-type":"DOI","asserted-by":"publisher"}]}],"content-domain":{"domain":["dl.acm.org"],"crossmark-restriction":true},"short-container-title":["ACM Trans. Parallel Comput."],"published-print":{"date-parts":[[2017,12,31]]},"abstract":"<jats:p>The concurrent memory reclamation problem is that of devising a way for a deallocating thread to verify that no other concurrent threads hold references to a memory block being deallocated. To date, in the absence of automatic garbage collection, there is no satisfactory solution to this problem; existing tracking methods like hazard pointers, reference counters, or epoch-based techniques like RCU are either prohibitively expensive or require significant programming expertise to the extent that implementing them efficiently can be worthy of a publication. None of the existing techniques are automatic or even semi-automated.<\/jats:p>\n          <jats:p>In this article, we take a new approach to concurrent memory reclamation. Instead of manually tracking access to memory locations as done in techniques like hazard pointers, or restricting shared accesses to specific epoch boundaries as in RCU, our algorithm, called ThreadScan, leverages operating system signaling to automatically detect which memory locations are being accessed by concurrent threads.<\/jats:p>\n          <jats:p>Initial empirical evidence shows that ThreadScan scales surprisingly well and requires negligible programming effort beyond the standard use of Malloc and Free.<\/jats:p>","DOI":"10.1145\/3201897","type":"journal-article","created":{"date-parts":[[2018,5,1]],"date-time":"2018-05-01T12:00:39Z","timestamp":1525176039000},"page":"1-18","update-policy":"https:\/\/doi.org\/10.1145\/crossmark-policy","source":"Crossref","is-referenced-by-count":12,"title":["ThreadScan"],"prefix":"10.1145","volume":"4","author":[{"given":"Dan","family":"Alistarh","sequence":"first","affiliation":[{"name":"IST Austria, Klosterneuburg, Austria"}],"role":[{"role":"author","vocabulary":"crossref"}]},{"given":"William","family":"Leiserson","sequence":"additional","affiliation":[{"name":"MIT, Cambridge, MA"}],"role":[{"role":"author","vocabulary":"crossref"}]},{"given":"Alexander","family":"Matveev","sequence":"additional","affiliation":[{"name":"MIT, Cambridge, MA"}],"role":[{"role":"author","vocabulary":"crossref"}]},{"given":"Nir","family":"Shavit","sequence":"additional","affiliation":[{"name":"MIT, Cambridge, MA"}],"role":[{"role":"author","vocabulary":"crossref"}]}],"member":"320","published-online":{"date-parts":[[2018,5]]},"reference":[{"key":"e_1_2_1_1_1","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-642-33651-5_1"},{"key":"e_1_2_1_2_1","doi-asserted-by":"publisher","DOI":"10.1145\/2592798.2592808"},{"key":"e_1_2_1_3_1","doi-asserted-by":"publisher","DOI":"10.1145\/2688500.2688523"},{"key":"e_1_2_1_4_1","doi-asserted-by":"publisher","DOI":"10.1145\/3064176.3064214"},{"key":"e_1_2_1_5_1","doi-asserted-by":"publisher","DOI":"10.1145\/2484239.2484254"},{"key":"e_1_2_1_6_1","doi-asserted-by":"publisher","DOI":"10.1145\/949305.949336"},{"key":"e_1_2_1_7_1","doi-asserted-by":"publisher","DOI":"10.1145\/155090.155109"},{"key":"e_1_2_1_8_1","doi-asserted-by":"publisher","DOI":"10.1145\/2486159.2486184"},{"key":"e_1_2_1_9_1","doi-asserted-by":"publisher","DOI":"10.1145\/378795.378823"},{"key":"e_1_2_1_10_1","doi-asserted-by":"publisher","DOI":"10.1145\/2189750.2150998"},{"key":"e_1_2_1_11_1","doi-asserted-by":"publisher","DOI":"10.1017\/s00446-002-0079-z"},{"key":"e_1_2_1_12_1","doi-asserted-by":"publisher","DOI":"10.1145\/383962.384016"},{"key":"e_1_2_1_13_1","doi-asserted-by":"publisher","DOI":"10.1145\/1993806.1993821"},{"key":"e_1_2_1_14_1","unstructured":"Jason Evans. 2015. JEMalloc. Retrieved from http:\/\/www.canonware.com\/jemalloc\/.  Jason Evans. 2015. JEMalloc. Retrieved from http:\/\/www.canonware.com\/jemalloc\/."},{"key":"e_1_2_1_15_1","first-page":"5","article-title":"Distributed caching with memcached","volume":"124","year":"2004","unstructured":"Fitzpatrick. 2004 . Distributed caching with memcached . Linux J. 124 , 5 . http:\/\/dl.acm.org\/citation.cfm?id&equals;1012894 Fitzpatrick. 2004. Distributed caching with memcached. Linux J. 124, 5. http:\/\/dl.acm.org\/citation.cfm?id&equals;1012894","journal-title":"Linux J."},{"key":"e_1_2_1_16_1","doi-asserted-by":"publisher","DOI":"10.1145\/1011767.1011776"},{"volume-title":"Technical Report UCAM-CL-TR-579. Computer Laboratory","author":"Fraser Keir","key":"e_1_2_1_17_1","unstructured":"Keir Fraser . 2004. Practical Lock-Freedom . Technical Report UCAM-CL-TR-579. Computer Laboratory , University of Cambridge . Keir Fraser. 2004. Practical Lock-Freedom. Technical Report UCAM-CL-TR-579. Computer Laboratory, University of Cambridge."},{"key":"e_1_2_1_18_1","doi-asserted-by":"publisher","DOI":"10.1145\/1233307.1233309"},{"key":"e_1_2_1_19_1","unstructured":"Sanjay Ghemawat and Paul Menage. (n.d.). TCMalloc: Thread-Caching Malloc. Retrieved from http:\/\/goog-perftools.sourceforge.net\/doc\/tcmalloc.html.  Sanjay Ghemawat and Paul Menage. (n.d.). TCMalloc: Thread-Caching Malloc. Retrieved from http:\/\/goog-perftools.sourceforge.net\/doc\/tcmalloc.html."},{"key":"e_1_2_1_20_1","doi-asserted-by":"publisher","DOI":"10.1109\/TPDS.2008.167"},{"key":"e_1_2_1_21_1","doi-asserted-by":"publisher","DOI":"10.1145\/2688500.2688501"},{"key":"e_1_2_1_22_1","series-title":"Lecture Notes in Computer Science","volume-title":"Algorithm Engineering","author":"Hanke Sabine","unstructured":"Sabine Hanke . 1999. The performance of concurrent red-black tree algorithms . In Algorithm Engineering . Lecture Notes in Computer Science , Vol. 1668 . Springer , 286--300. http:\/\/citeseer.ist.psu.edu\/viewdoc\/summary?doi&equals;10.1.1.25.6504. Sabine Hanke. 1999. The performance of concurrent red-black tree algorithms. In Algorithm Engineering. Lecture Notes in Computer Science, Vol. 1668. Springer, 286--300. http:\/\/citeseer.ist.psu.edu\/viewdoc\/summary?doi&equals;10.1.1.25.6504."},{"key":"e_1_2_1_23_1","doi-asserted-by":"publisher","DOI":"10.5555\/645958.676105"},{"key":"e_1_2_1_24_1","doi-asserted-by":"publisher","DOI":"10.1016\/j.jpdc.2007.04.010"},{"key":"e_1_2_1_25_1","doi-asserted-by":"publisher","DOI":"10.1007\/11795490_3"},{"key":"e_1_2_1_26_1","doi-asserted-by":"publisher","DOI":"10.5555\/1760631.1760646"},{"key":"e_1_2_1_27_1","doi-asserted-by":"publisher","DOI":"10.1145\/1062247.1062249"},{"volume-title":"The Art of Multiprocessor Programming. Morgan Kaufmann","author":"Herlihy Maurice","key":"e_1_2_1_28_1","unstructured":"Maurice Herlihy and Nir Shavit . 2008. The Art of Multiprocessor Programming. Morgan Kaufmann , San Francisco, CA . Maurice Herlihy and Nir Shavit. 2008. The Art of Multiprocessor Programming. Morgan Kaufmann, San Francisco, CA."},{"key":"e_1_2_1_29_1","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-540-87779-0_24"},{"volume-title":"The Linux Programming Interface","author":"Kerrisk Michael","key":"e_1_2_1_30_1","unstructured":"Michael Kerrisk . 2010. The Linux Programming Interface . No Starch Press, San Francisco, CA . Michael Kerrisk. 2010. The Linux Programming Interface. No Starch Press, San Francisco, CA."},{"key":"e_1_2_1_31_1","doi-asserted-by":"publisher","DOI":"10.1145\/1618525.1618527"},{"key":"e_1_2_1_32_1","unstructured":"Doug Lea. 2005. Java Concurrency Package. Retrieved from http:\/\/docs.oracle.com\/javase\/6\/docs\/api\/java\/util\/concurrent\/.  Doug Lea. 2005. Java Concurrency Package. Retrieved from http:\/\/docs.oracle.com\/javase\/6\/docs\/api\/java\/util\/concurrent\/."},{"key":"e_1_2_1_33_1","unstructured":"Doug Lea. 2007. Class ConcurrentHashMap&lt;K V&gt;. Retrieved from http:\/\/g.oswego.edu\/dl\/jsr166\/dist\/docs\/java.base\/java\/util\/concurrent\/ConcurrentHashMap.html.  Doug Lea. 2007. Class ConcurrentHashMap&lt;K V&gt;. Retrieved from http:\/\/g.oswego.edu\/dl\/jsr166\/dist\/docs\/java.base\/java\/util\/concurrent\/ConcurrentHashMap.html."},{"key":"e_1_2_1_34_1","unstructured":"Doug Lea. 2007. Class ConcurrentSkipListMap&lt;K V&gt;. Retrieved from http:\/\/java.sun.com\/javase\/6\/docs\/api\/java\/util\/concurrent\/ConcurrentSkipListMap.html.  Doug Lea. 2007. Class ConcurrentSkipListMap&lt;K V&gt;. Retrieved from http:\/\/java.sun.com\/javase\/6\/docs\/api\/java\/util\/concurrent\/ConcurrentSkipListMap.html."},{"key":"e_1_2_1_35_1","doi-asserted-by":"publisher","DOI":"10.1145\/1854273.1854324"},{"key":"e_1_2_1_36_1","unstructured":"William M. Leiserson. 2015. ThreadScan Git Repository. Retrieved from https:\/\/github.com\/Willtor\/ThreadScan.  William M. Leiserson. 2015. ThreadScan Git Repository. Retrieved from https:\/\/github.com\/Willtor\/ThreadScan."},{"key":"e_1_2_1_37_1","doi-asserted-by":"publisher","DOI":"10.1145\/1111596.1111597"},{"key":"e_1_2_1_38_1","volume-title":"Linux System Programming","author":"Love Robert","unstructured":"Robert Love . 2013. Linux System Programming ( 2 nd ed.). O\u2019Reilly Media , Sebastopol, CA . Robert Love. 2013. Linux System Programming (2nd ed.). O\u2019Reilly Media, Sebastopol, CA.","edition":"2"},{"key":"e_1_2_1_39_1","unstructured":"Redis Labs Ltd. (n.d.). Memtier Benchmark. Retrieved from https:\/\/github.com\/RedisLabs\/memtier_benchmark.  Redis Labs Ltd. (n.d.). Memtier Benchmark. Retrieved from https:\/\/github.com\/RedisLabs\/memtier_benchmark."},{"volume-title":"Proceedings of the Ottawa Linux Symposium. 338--367","author":"McKenney P. E.","key":"e_1_2_1_40_1","unstructured":"P. E. McKenney , J. Appavoo , A. Kleen , O. Krieger , R. Russell , D. Sarma , and M. Soni . 2001. Read-copy update . In Proceedings of the Ottawa Linux Symposium. 338--367 . P. E. McKenney, J. Appavoo, A. Kleen, O. Krieger, R. Russell, D. Sarma, and M. Soni. 2001. Read-copy update. In Proceedings of the Ottawa Linux Symposium. 338--367."},{"key":"e_1_2_1_41_1","doi-asserted-by":"publisher","DOI":"10.1109\/TPDS.2004.8"},{"volume-title":"Handbook of Data Structures and Applications","author":"Moir Mark","key":"e_1_2_1_42_1","unstructured":"Mark Moir and Nir Shavit . 2007. Concurrent data structures . In Handbook of Data Structures and Applications . Chapman 8 Hall\/CRC, Boca Raton, FL, 47-1. Mark Moir and Nir Shavit. 2007. Concurrent data structures. In Handbook of Data Structures and Applications. Chapman 8 Hall\/CRC, Boca Raton, FL, 47-1."},{"key":"e_1_2_1_43_1","unstructured":"Objective-C. 2014. Automatic Reference Counting. Retrieved from http:\/\/en.wikipedia.org\/wiki\/Automatic_Reference_Counting.  Objective-C. 2014. Automatic Reference Counting. Retrieved from http:\/\/en.wikipedia.org\/wiki\/Automatic_Reference_Counting."},{"key":"e_1_2_1_44_1","volume-title":"Solomon","author":"Russinovich Mark","year":"2009","unstructured":"Mark Russinovich and David A . Solomon . 2009 . Windows Internals : Including Windows Server 2008 and Windows Vista (5th ed.). Microsoft Press . Mark Russinovich and David A. Solomon. 2009. Windows Internals: Including Windows Server 2008 and Windows Vista (5th ed.). Microsoft Press."},{"key":"e_1_2_1_45_1","doi-asserted-by":"publisher","DOI":"10.1002\/spe.600"},{"key":"e_1_2_1_46_1","doi-asserted-by":"publisher","DOI":"10.1145\/1147954.1147958"},{"key":"e_1_2_1_47_1","doi-asserted-by":"publisher","DOI":"10.5555\/846234.849296"},{"key":"e_1_2_1_48_1","doi-asserted-by":"publisher","DOI":"10.1145\/224964.224988"},{"key":"e_1_2_1_49_1","unstructured":"Wikipedia. 2018. Signal (IPC). Retrieved from http:\/\/en.wikipedia.org\/wiki\/Unix_signal.  Wikipedia. 2018. Signal (IPC). Retrieved from http:\/\/en.wikipedia.org\/wiki\/Unix_signal."}],"container-title":["ACM Transactions on Parallel Computing"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3201897","content-type":"unspecified","content-version":"vor","intended-application":"text-mining"},{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/3201897","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2025,6,18]],"date-time":"2025-06-18T01:08:53Z","timestamp":1750208933000},"score":1,"resource":{"primary":{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3201897"}},"subtitle":["Automatic and Scalable Memory Reclamation"],"short-title":[],"issued":{"date-parts":[[2017,12,31]]},"references-count":49,"journal-issue":{"issue":"4","published-print":{"date-parts":[[2017,12,31]]}},"alternative-id":["10.1145\/3201897"],"URL":"https:\/\/doi.org\/10.1145\/3201897","relation":{},"ISSN":["2329-4949","2329-4957"],"issn-type":[{"type":"print","value":"2329-4949"},{"type":"electronic","value":"2329-4957"}],"subject":[],"published":{"date-parts":[[2017,12,31]]},"assertion":[{"value":"2016-05-01","order":0,"name":"received","label":"Received","group":{"name":"publication_history","label":"Publication History"}},{"value":"2018-01-01","order":1,"name":"accepted","label":"Accepted","group":{"name":"publication_history","label":"Publication History"}},{"value":"2018-05-01","order":2,"name":"published","label":"Published","group":{"name":"publication_history","label":"Publication History"}}]}}