use optimistic_lock_coupling::{OptimisticLockCoupling, OptimisticLockCouplingErrorType};
#[inline(always)]
fn read_txn(lock: &OptimisticLockCoupling<i32>) -> Result<(), OptimisticLockCouplingErrorType> {
let read_guard = lock.read()?;
println!("status: {}", read_guard);
println!("\tmy operations: {} + 1 = {}", *read_guard, *read_guard + 1);
let res = read_guard.try_sync();
println!("safely synced");
res
}
fn main() {
let lock = OptimisticLockCoupling::new(1);
'retry: loop {
let res = read_txn(&lock);
if res.is_err() {
continue 'retry;
} else {
break 'retry;
}
}
lock.read_txn(
#[inline(always)]
|guard| {
println!("{}", guard);
Ok(())
},
)
.unwrap();
}