summaryrefslogtreecommitdiff
path: root/examples/double_mutex.rs
diff options
context:
space:
mode:
authorBotahamec <botahamec@outlook.com>2024-03-06 22:40:20 -0500
committerBotahamec <botahamec@outlook.com>2024-03-06 22:40:20 -0500
commit8311c58b99aa86f4a971ea208e1fb3a9a825d566 (patch)
treee30016adea76308c3017e61ca7fe5ddeb5aace2c /examples/double_mutex.rs
parentd96edbd12da892a101362ae89fb3c10917361fe6 (diff)
Added some examples
Diffstat (limited to 'examples/double_mutex.rs')
-rw-r--r--examples/double_mutex.rs27
1 files changed, 27 insertions, 0 deletions
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<i32> = Mutex::new(0);
+static DATA_2: Mutex<String> = 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);
+}