# readlock (Shared) Read-Only Lock: A thing that can be useful when you don't really want shared mutability, you just want to mutate a value from one place and read it from many others. This library provides three types: - `Shared`: similar to `Arc>`, but you can only create `SharedReadLock`s and `WeakReadLock`s from it that share access to the same inner value, not further `Shared`s. Also, acquiring a write lock requires unique ownership / borrowing (`&mut self`). However: Reading requires *no* locking because mutably borrowing the `Shared` means that no other thread can be mutating the value at the same time (all other reference to the value are read-only). - `SharedReadLock`: like a `Arc>` that is only ever used for reading. Can be downgraded to `WeakReadLock`. - `WeakReadLock`: like a `Weak>`. That is, it references the same memory, but if the original `Shared` and any derived `SharedReadLock`s to that value are dropped, it will be deallocated regardless of any `WeakReadLock`s. Must be upgraded into `SharedReadLock` to access the inner value.