Module txn_lock::scalar

source ·
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.

Type Aliases§