- 使用
Arc
和Mutex
实现:
- 在Rust中,可以使用
Arc
(原子引用计数)和Mutex
(互斥锁)来保证顺序一致性。Mutex
提供了一种机制,使得在同一时间只有一个线程可以访问共享资源。
- 代码示例:
use std::sync::{Arc, Mutex};
use std::thread;
fn main() {
let shared_data = Arc::new(Mutex::new(0));
let shared_data_clone = shared_data.clone();
let thread_a = thread::spawn(move || {
let mut data = shared_data_clone.lock().unwrap();
*data = 42;
});
let thread_b = thread::spawn(move || {
let data = shared_data.lock().unwrap();
println!("Thread B reads: {}", *data);
});
thread_a.join().unwrap();
thread_b.join().unwrap();
}
- 解释:
- 首先创建了一个
Arc<Mutex<i32>>
类型的共享变量shared_data
,初始值为0。
thread_a
线程获取Mutex
的锁(lock
方法),然后对共享变量进行赋值操作。
thread_b
线程同样获取Mutex
的锁,然后读取共享变量的值并打印。
- 由于
Mutex
的互斥特性,thread_a
对变量的赋值操作一定在thread_b
读取操作之前完成,从而保证了顺序一致性,使得thread_b
能读取到thread_a
正确赋值后的值。