From 8311c58b99aa86f4a971ea208e1fb3a9a825d566 Mon Sep 17 00:00:00 2001 From: Botahamec Date: Wed, 6 Mar 2024 22:40:20 -0500 Subject: Added some examples --- examples/basic.rs | 22 ++++++++++++++++++++++ examples/double_mutex.rs | 27 +++++++++++++++++++++++++++ 2 files changed, 49 insertions(+) create mode 100644 examples/basic.rs create mode 100644 examples/double_mutex.rs (limited to 'examples') diff --git a/examples/basic.rs b/examples/basic.rs new file mode 100644 index 0000000..535b80a --- /dev/null +++ b/examples/basic.rs @@ -0,0 +1,22 @@ +use std::thread; + +use happylock::mutex::Mutex; +use happylock::ThreadKey; + +const N: usize = 10; + +static DATA: Mutex = Mutex::new(0); + +fn main() { + for _ in 0..N { + thread::spawn(move || { + let key = ThreadKey::lock().unwrap(); + let mut data = DATA.lock(key); + *data += 1; + }); + } + + let key = ThreadKey::lock().unwrap(); + let data = DATA.lock(key); + println!("{}", *data); +} diff --git a/examples/double_mutex.rs b/examples/double_mutex.rs new file mode 100644 index 0000000..76f3294 --- /dev/null +++ b/examples/double_mutex.rs @@ -0,0 +1,27 @@ +use std::thread; + +use happylock::mutex::Mutex; +use happylock::{LockGuard, ThreadKey}; + +const N: usize = 10; + +static DATA_1: Mutex = Mutex::new(0); +static DATA_2: Mutex = Mutex::new(String::new()); + +fn main() { + for _ in 0..N { + thread::spawn(move || { + let key = ThreadKey::lock().unwrap(); + let data = (&DATA_1, &DATA_2); + let mut guard = LockGuard::lock(&data, key); + *guard.1 = (100 - *guard.0).to_string(); + *guard.0 += 1; + }); + } + + let key = ThreadKey::lock().unwrap(); + let data = (&DATA_1, &DATA_2); + let data = LockGuard::lock(&data, key); + println!("{}", *data.0); + println!("{}", *data.1); +} -- cgit v1.2.3