[Day5] Read Rust Atomics and Locks
At Topics: Chapter 1. Basics of Rust Concurrency
Until: Reference Counting
Sync to My Blog: https://my-blog-chengr4.vercel.app/posts/day5-read-rust-atomics-and-locks_230511
Prerequisites
- Understand smart pointers
Notes
- Any data shared between threads will need to live as long as the longest living thread.
- A
static
item is never droped and has already exists before the main function of the program even starts.
static X: [i32; 3] = [1, 2, 3];
thread::spawn(|| dbg!(&X)); // [src/main.rs:6] &X = [ 1, 2, 3,]
- Some ways to share ownership to threads:
static
,Box::leak(Box::new([1, 2, 3]));
,Arc
References
areCopy
, meaning that when you "move" them, the original still exists, just like with an integer or boolean.
Reference Counting
// reference counted
use std::rc::Rc;
// Both 'a' and 'b' Rc will refer to the same allocation; they share ownership.
let a = Rc::new([1, 2, 3]);
let b = a.clone();
assert_eq!(a.as_ptr(), b.as_ptr()); // Same allocation!
- Threads use
std::sync::Arc
instead ofstd::rc::Rc
, while it guarantees that modifications to the reference counter are indivisible atomic operations