#mutex #rwlock #synchronization-primitive #thread

unlock

Instrumented synchronization primitives helping you to unlock performance issues

13 releases

0.0.13 Feb 12, 2024
0.0.12 Feb 3, 2024

#512 in Concurrency

Download history 131/week @ 2024-01-27 88/week @ 2024-02-03 14/week @ 2024-02-10 13/week @ 2024-02-17 47/week @ 2024-02-24 8/week @ 2024-03-09 12/week @ 2024-03-16 41/week @ 2024-03-30 239/week @ 2024-04-13

280 downloads per month

MIT/Apache

38KB
781 lines

unlock

github crates.io docs.rs build status

Helpers for tracing and troubleshooting multithreaded code.

Example Trace


Usage

Import RwLock and Mutex from this crate instead of parking_lot directly.

After this, you can instrument a section of code like this:

let condition = true;

if condition {
    unlock::capture();
}

/* do some work */

if condition {
    let events = unlock::drain();
    unlock::html::write("trace.html", &events)?;
    println!("Wrote trace.html");
}

How does it work

This library provides two facade types:

These integrate with a high performance concurrent tracing system to capture events. While this will have some overhead, we aim to make it as small as possible.

Once a workload has been instrumented, the drain function can be called to collect these events, which then can be formatted using either built-in methods such as html::write, or serialized as you please using serde for processing later.


Features

  • trace - Enable real tracing support. If this feature is disabled, this library will be replaced by a stub that can easily be optimized away.
  • parking_lot (default) - Enable support for parking_lot types. If this feature is enabled and trace is disabled, this will re-export parking_lot primitives.
  • serde - Enable serialization for events.

Dependencies

~0.8–7.5MB
~35K SLoC