summaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
Diffstat (limited to 'examples')
-rw-r--r--examples/basic.rs12
-rw-r--r--examples/double_mutex.rs14
-rw-r--r--examples/list.rs19
3 files changed, 22 insertions, 23 deletions
diff --git a/examples/basic.rs b/examples/basic.rs
index 535b80a..8dfca84 100644
--- a/examples/basic.rs
+++ b/examples/basic.rs
@@ -1,22 +1,22 @@
use std::thread;
-use happylock::mutex::Mutex;
+use happylock::mutex::{Mutex, SpinLock};
use happylock::ThreadKey;
const N: usize = 10;
-static DATA: Mutex<i32> = Mutex::new(0);
+static DATA: SpinLock<i32> = Mutex::new(0);
fn main() {
for _ in 0..N {
thread::spawn(move || {
- let key = ThreadKey::lock().unwrap();
- let mut data = DATA.lock(key);
+ let mut key = ThreadKey::lock().unwrap();
+ let mut data = DATA.lock(&mut key);
*data += 1;
});
}
- let key = ThreadKey::lock().unwrap();
- let data = DATA.lock(key);
+ let mut key = ThreadKey::lock().unwrap();
+ let data = DATA.lock(&mut key);
println!("{}", *data);
}
diff --git a/examples/double_mutex.rs b/examples/double_mutex.rs
index 76f3294..033bfed 100644
--- a/examples/double_mutex.rs
+++ b/examples/double_mutex.rs
@@ -1,27 +1,27 @@
use std::thread;
-use happylock::mutex::Mutex;
+use happylock::mutex::{Mutex, SpinLock};
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());
+static DATA_1: SpinLock<i32> = Mutex::new(0);
+static DATA_2: SpinLock<String> = Mutex::new(String::new());
fn main() {
for _ in 0..N {
thread::spawn(move || {
- let key = ThreadKey::lock().unwrap();
+ let mut key = ThreadKey::lock().unwrap();
let data = (&DATA_1, &DATA_2);
- let mut guard = LockGuard::lock(&data, key);
+ let mut guard = LockGuard::lock(&data, &mut key);
*guard.1 = (100 - *guard.0).to_string();
*guard.0 += 1;
});
}
- let key = ThreadKey::lock().unwrap();
+ let mut key = ThreadKey::lock().unwrap();
let data = (&DATA_1, &DATA_2);
- let data = LockGuard::lock(&data, key);
+ let data = LockGuard::lock(&data, &mut key);
println!("{}", *data.0);
println!("{}", *data.1);
}
diff --git a/examples/list.rs b/examples/list.rs
index 904d9f2..c73b54e 100644
--- a/examples/list.rs
+++ b/examples/list.rs
@@ -1,11 +1,11 @@
use std::thread;
-use happylock::mutex::Mutex;
+use happylock::mutex::{Mutex, SpinLock};
use happylock::{LockGuard, ThreadKey};
const N: usize = 10;
-static DATA: [Mutex<usize>; 6] = [
+static DATA: [SpinLock<usize>; 6] = [
Mutex::new(0),
Mutex::new(1),
Mutex::new(2),
@@ -14,39 +14,38 @@ static DATA: [Mutex<usize>; 6] = [
Mutex::new(5),
];
-static SEED: Mutex<u32> = Mutex::new(42);
+static SEED: SpinLock<u32> = Mutex::new(42);
-fn random(key: ThreadKey) -> (ThreadKey, usize) {
+fn random(key: &mut ThreadKey) -> usize {
let mut seed = SEED.lock(key);
let x = *seed;
let x = x ^ (x << 13);
let x = x ^ (x >> 17);
let x = x ^ (x << 5);
*seed = x;
- (Mutex::unlock(seed), x as usize)
+ x as usize
}
fn main() {
for _ in 0..N {
thread::spawn(move || {
let mut key = ThreadKey::lock().unwrap();
- let mut rand;
let mut data = Vec::new();
for _ in 0..3 {
- (key, rand) = random(key);
+ let rand = random(&mut key);
data.push(&DATA[rand % 6]);
}
let data = [data[0], data[1], data[2]];
- let mut guard = LockGuard::lock(&data, key);
+ let mut guard = LockGuard::lock(&data, &mut key);
*guard[0] += *guard[1];
*guard[1] += *guard[2];
*guard[2] += *guard[0];
});
}
- let key = ThreadKey::lock().unwrap();
- let data = LockGuard::lock(&DATA, key);
+ let mut key = ThreadKey::lock().unwrap();
+ let data = LockGuard::lock(&DATA, &mut key);
for val in &*data {
println!("{}", **val);
}