1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
pub trait Mutex {
    type LockState;

    fn lock(&self) -> Self::LockState;
    fn try_lock(&self) -> Option<Self::LockState>;

    fn unlock(&self, state: Self::LockState);
}

pub trait RwLock {
    type ReadLockState;
    type WriteLockState;

    fn acquire_read(&self) -> Self::ReadLockState;
    fn acquire_write(&self) -> Self::WriteLockState;
    fn release_read(&self, state: Self::ReadLockState);
    fn release_write(&self, state: Self::WriteLockState);
}