use std::any::Any;
use std::sync::Arc;
use sync_cow::SyncCow;
fn main() -> Result<(), Box<dyn Any + Send>> {
let cow = Arc::new(SyncCow::new(5));
let cow_write_arc = cow.clone();
let cow_read_arc = cow.clone();
let writer = std::thread::spawn(move || {
let cow = &*cow_write_arc; let mut val = 0;
cow.edit(|x| {
val = *x;
*x = 4;
});
println!("Cow was {} when writing", val);
});
let reader = std::thread::spawn(move || {
let cow = &*cow_read_arc; println!("Cow was {} when reading", cow.read());
});
writer.join()?;
reader.join()?;
Ok(())
}