4 releases
0.1.3 | Mar 23, 2021 |
---|---|
0.1.2 | Mar 22, 2021 |
0.1.1 | Mar 21, 2021 |
0.1.0 | Mar 18, 2021 |
#358 in Concurrency
6,520 downloads per month
Used in 38 crates
(5 directly)
13KB
58 lines
safe-lock
A simple SafeLock
struct.
Use Cases
- Run tests sequentially
- Prevent concurrent operations on atomic values
- Prevent concurrent operations on data and systems outside the Rust runtime
Features
- Const constructor
- Depends only on
std
forbid(unsafe_code)
- 100% test coverage
Limitations
- Not a
Mutex<T>
. Does not contain a value. - Unoptimized. Uses
AtomicBool
in a spinlock, not fast OS locks. - Not a fair lock. If multiple threads acquire the lock in loops, some may never acquire it.
Alternatives
rusty-fork
- Run tests in separate processes
std::sync::Mutex
- Part of the Rust standard library: well reviewed, well tested, and well maintained.
- Uses fast OS locks
- Has no const constructor. See rust#66806
and const-eval#3.
You can work around this with unstable
core::lazy::OnceCell
or variousunsafe
crates:lazy_static
,once_cell
,lazycell
, andconquer-once
.
parking_lot
- Well written code. Many hope that it will end up in the Rust standard library someday.
- Contains plenty of
unsafe
try-lock
- Popular
- No dependencies,
no_std
- Uses
unsafe
ruspiro-lock
- Sync and async locks
- No dependencies,
no_std
- Uses
unsafe
flexible-locks
- Lots of
unsafe
- Uses fast OS locks
- Unmaintained
- Lots of
Related Crates
safina-sync
provides a safe asyncMutex
Example
Make some tests run sequentially so they don't interfere with each other:
use safe_lock::SafeLock;
static LOCK: SafeLock = SafeLock::new();
[#test]
fn test1() {
let _guard = LOCK.lock();
// ...
}
[#test]
fn test2() {
let _guard = LOCK.lock();
// ...
}
Cargo Geiger Safety Report
Metric output format: x/y
x = unsafe code used by the build
y = total unsafe code found in the crate
Symbols:
🔒 = No `unsafe` usage found, declares #![forbid(unsafe_code)]
❓ = No `unsafe` usage found, missing #![forbid(unsafe_code)]
☢️ = `unsafe` usage found
Functions Expressions Impls Traits Methods Dependency
0/0 0/0 0/0 0/0 0/0 🔒 safe-lock 0.1.3
0/0 0/0 0/0 0/0 0/0
Changelog
- v0.1.3 - Increase test coverage
- v0.1.2 - Use
Acquire
andRelease
ordering - v0.1.1 - Update docs
- v0.1.0 - Initial version
Happy Contributors 🙂
Fixing bugs and adding features is easy and fast. Send us a pull request and we intend to:
- Always respond within 24 hours
- Provide clear & concrete feedback
- Immediately make a new release for your accepted change
License: Apache-2.0