Module parkinglot

Source
Expand description

Wrapper types and type aliases for tracing parking_lot mutexes.

This module provides type aliases that use the lockapi module to provide tracing variants of the parking_lot primitives. The tracing module contains type aliases that use dependency tracking, while the main parking_lot primitives are reexported as raw.

This main module imports from tracing when debug_assertions are enabled, and from raw when they’re not. Note that primitives for which no tracing wrapper exists are not imported into the main module.

§Usage

use tracing_mutex::parkinglot::Mutex;
let mutex = Arc::new(Mutex::new(0));

let handles: Vec<_> = (0..10).map(|_| {
   let mutex = Arc::clone(&mutex);
   thread::spawn(move || *mutex.lock() += 1)
}).collect();

handles.into_iter().for_each(|handle| handle.join().unwrap());

// All threads completed so the value should be 10.
assert_eq!(10, *mutex.lock());

§Limitations

The main lock for the global state is still provided by std::sync and the tracing primitives are larger than the parking_lot primitives they wrap, so there can be a performance degradation between using this and using parking_lot directly. If this is of concern to you, try using the DebugX-structs, which provide cycle detection only when debug_assertions are enabled and have no overhead when they’re not.

In addition, the mutex guards returned by the tracing wrappers are !Send, regardless of whether parking_lot is configured to have Send mutex guards. This is a limitation of the current bookkeeping system.

Re-exports§

pub use tracing::FairMutex;
pub use tracing::FairMutexGuard;
pub use tracing::MappedFairMutexGuard;
pub use tracing::MappedMutexGuard;
pub use tracing::MappedReentrantMutexGuard;
pub use tracing::MappedRwLockReadGuard;
pub use tracing::MappedRwLockWriteGuard;
pub use tracing::Mutex;
pub use tracing::MutexGuard;
pub use tracing::Once;
pub use tracing::ReentrantMutex;
pub use tracing::ReentrantMutexGuard;
pub use tracing::RwLock;
pub use tracing::RwLockReadGuard;
pub use tracing::RwLockUpgradableReadGuard;
pub use tracing::RwLockWriteGuard;
pub use parking_lot as raw;

Modules§

tracing
Dependency tracing wrappers for parking_lot.

Enums§

OnceState
Current state of a Once.