- thread_local
- RefCell
thread-local variables
examples/threads/thread-local/src/main.rs
use std::cell::RefCell; thread_local! { pub static TEXT: RefCell<String> = const { RefCell::new(String::new()) }; } fn main() { let threads = 3; std::thread::scope(|scope| { for i in 1..=threads { scope.spawn(move || { let msg = format!("doubled: {}", i * 2); TEXT.with_borrow_mut(|val| val.push_str(&msg)); do_something(i) }); } }); } fn do_something(index: i32) { TEXT.with_borrow(|val| { println!("{index} '{val}' {:?}", std::thread::current().id()); }); }
1 'doubled: 2' ThreadId(2) 2 'doubled: 4' ThreadId(3) 3 'doubled: 6' ThreadId(4)