Adonis  Kerluke

Adonis Kerluke

1624782891

Implementing Hazard Pointers in Rust

This time, we take a stab at implementing Hazard Pointers (https://erdani.org/publications/cuj-2004-12.pdf) in Rust. We follow along with the C++ implementation in Facebook’s Folly library (https://github.com/facebook/folly/blob/master/folly/synchronization/Hazptr.h), as well as the C++ standardization proposal (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p1121r3.pdf).

  • 0:00:00 Introduction
  • 0:00:37 Rust for Rustaceans
  • 0:01:00 Concurrent Memory Reclamation
  • 0:10:32 Hazard Pointers
  • 0:35:27 Folly’s Hazard Pointer Interface
  • 0:54:08 Delayed Reclamation
  • 0:58:18 More Folly Interface
  • 1:11:56 A Wild Entity Diagram Appears
  • 1:16:40 Memory Use
  • 1:21:12 More Folly Interface
  • 1:27:50 Starting the Rust Code
  • 1:35:24 Testing Out the Rust Interface
  • 1:42:32 HazPtrHolder::load
  • 2:02:15 HazPtrObject::retire
  • 2:19:43 HazPtrHolder::reset
  • 2:22:50 Unsafe Blocks in Unsafe Fns
  • 2:25:04 Borrow Checker Prevents Misuse
  • 2:27:45 Bad Drop Lint
  • 2:34:15 Dropping in HazPtrDomain::retire
  • 2:46:00 Intermission
  • 2:47:57 Reading Folly’s HazPtrDomain::retire
  • 2:59:02 HazPtrDomain::acquire
  • 3:17:32 HazPtrDomain::retire
  • 3:45:57 Specifying a Deleter
  • 4:32:26 Tests Pass?
  • 4:36:12 Eager Reclaiming
  • 4:37:32 Checking Reclamation Behavior
  • 4:52:04 Final Thoughts

You can find the code for the implementation at https://github.com/jonhoo/haphazard.

#rust #cplusplus #programming #developer

Implementing Hazard Pointers in Rust