#lock #safe

safe-lock

A lock struct with a const fn constructor and no unsafe

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

#361 in Concurrency

Download history 2562/week @ 2023-10-15 3091/week @ 2023-10-22 3828/week @ 2023-10-29 2691/week @ 2023-11-05 3574/week @ 2023-11-12 3182/week @ 2023-11-19 3729/week @ 2023-11-26 3467/week @ 2023-12-03 4341/week @ 2023-12-10 4558/week @ 2023-12-17 2466/week @ 2023-12-24 2852/week @ 2023-12-31 3700/week @ 2024-01-07 2890/week @ 2024-01-14 3875/week @ 2024-01-21 3330/week @ 2024-01-28

13,900 downloads per month
Used in 12 crates (5 directly)

Apache-2.0

13KB
58 lines

crates.io version license: Apache 2.0 unsafe forbidden pipeline status

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

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 and Release 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

No runtime deps