Expand description
A transactional lock on a scalar value.
Example:
use futures::executor::block_on;
use txn_lock::scalar::*;
use txn_lock::Error;
let lock = TxnLock::new("zero");
let value = block_on(lock.read(1)).expect("read");
assert_eq!(*value, "zero");
assert_eq!(lock.try_write(1).unwrap_err(), Error::WouldBlock);
assert_eq!(*lock.try_read(1).expect("read"), "zero");
lock.commit(1);
{
let mut guard = lock.try_write(2).expect("write lock");
*guard = "two";
}
assert_eq!(*lock.try_read(0).expect("read past version"), "zero");
assert_eq!(*lock.try_read(2).expect("read current version"), "two");
lock.commit(2);
assert_eq!(*lock.try_read(3).expect("new value"), "two");
lock.rollback(&3);
{
let mut guard = lock.try_write(3).expect("write lock");
*guard = "three";
}
lock.finalize(1);
assert_eq!(lock.try_read(0).unwrap_err(), Error::Outdated);
assert_eq!(*lock.try_read(3).expect("current value"), "three");
Structs§
- A range used to reserve a permit to guard access to a
TxnLock
- A futures-aware read-write lock on a scalar value which supports transactional versioning.