mirror of
https://github.com/bertptrs/tracing-mutex.git
synced 2025-12-25 12:40:31 +01:00
Add example showcasing how to replace parking_lot
This commit is contained in:
@@ -11,6 +11,10 @@ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|||||||
- On Rust 1.80 or newer, a wrapper for `std::sync::LazyLock` is now available. The MSRV has not been
|
- On Rust 1.80 or newer, a wrapper for `std::sync::LazyLock` is now available. The MSRV has not been
|
||||||
changed; older versions simply don't get this wrapper.
|
changed; older versions simply don't get this wrapper.
|
||||||
|
|
||||||
|
- Added missing const-initialisation wrappers for `parking_lot`. The API interface for
|
||||||
|
`tracing_mutex::parkinglot` is now identical to `parking_lot`, and an example showing how to use
|
||||||
|
it as a drop-in replacement was added.
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
|
|
||||||
- Reworked CI to better test continued support for the minimum supported Rust version
|
- Reworked CI to better test continued support for the minimum supported Rust version
|
||||||
|
|||||||
@@ -30,6 +30,10 @@ rand = "0.8"
|
|||||||
name = "mutex"
|
name = "mutex"
|
||||||
harness = false
|
harness = false
|
||||||
|
|
||||||
|
[[example]]
|
||||||
|
name = "drop_in_parking_lot"
|
||||||
|
required-features = ["parkinglot"]
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
default = ["backtraces"]
|
default = ["backtraces"]
|
||||||
backtraces = []
|
backtraces = []
|
||||||
|
|||||||
32
examples/drop_in_parking_lot.rs
Normal file
32
examples/drop_in_parking_lot.rs
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
//! This example shows how you can use the [`tracing-mutex`] crate as a drop-in replacement for the
|
||||||
|
//! parking_lot crate. By default, `tracing-mutex` offers a set of type aliases that allows you to
|
||||||
|
//! use cycle-checking in development, and raw primitives in release mode, but this way, you can
|
||||||
|
//! even remove the dependency altogether, or hide it behind a feature.
|
||||||
|
//!
|
||||||
|
//! You can use whatever conditional compilation makes sense in context.
|
||||||
|
use std::sync::Arc;
|
||||||
|
|
||||||
|
#[cfg(not(debug_assertions))]
|
||||||
|
use parking_lot;
|
||||||
|
|
||||||
|
#[cfg(debug_assertions)]
|
||||||
|
// Note: specifically use the `tracing` module, because at this point we are very sure we want to do
|
||||||
|
// deadlock tracing, so no need to use the automatic selection.
|
||||||
|
use tracing_mutex::parkinglot::tracing as parking_lot;
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let mutex = Arc::new(parking_lot::const_mutex(0));
|
||||||
|
|
||||||
|
let handles: Vec<_> = (0..42)
|
||||||
|
.map(|_| {
|
||||||
|
let mutex = Arc::clone(&mutex);
|
||||||
|
std::thread::spawn(move || *mutex.lock() += 1)
|
||||||
|
})
|
||||||
|
.collect();
|
||||||
|
|
||||||
|
handles
|
||||||
|
.into_iter()
|
||||||
|
.for_each(|handle| handle.join().unwrap());
|
||||||
|
|
||||||
|
assert_eq!(*mutex.lock(), 42);
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user