use std::sync::{Arc, RwLock};
use std::thread;
// 定义Data结构体
struct Data {
value: i32,
}
fn main() {
// 使用Arc和RwLock来保护Data
let data = Arc::new(RwLock::new(Data { value: 0 }));
let mut read_handles = vec![];
let mut write_handles = vec![];
// 创建3个读线程
for _ in 0..3 {
let data_clone = Arc::clone(&data);
let handle = thread::spawn(move || {
let data = data_clone.read().unwrap();
println!("Read data: {}", data.value);
});
read_handles.push(handle);
}
// 创建2个写线程
for i in 0..2 {
let data_clone = Arc::clone(&data);
let handle = thread::spawn(move || {
let mut data = data_clone.write().unwrap();
data.value += i;
println!("Write data: {}", data.value);
});
write_handles.push(handle);
}
// 等待所有读线程结束
for handle in read_handles {
handle.join().unwrap();
}
// 等待所有写线程结束
for handle in write_handles {
handle.join().unwrap();
}
}