summaryrefslogtreecommitdiff
path: root/examples/dining_philosophers.rs
diff options
context:
space:
mode:
authorBotahamec <botahamec@outlook.com>2024-05-23 20:44:02 -0400
committerBotahamec <botahamec@outlook.com>2024-05-23 20:44:02 -0400
commitfd4ee65a78ecbf376d99377a367137b0b8cdad41 (patch)
tree663b211b0da02431b2d100a270d60d48eebbefb0 /examples/dining_philosophers.rs
parent0926201a52f860b1f75dda2e9bd6d2e536cc5f68 (diff)
parent8ecf29cfe2a74d02b2c4bcb7f7ad1a811dc38dfe (diff)
Merge branch '0.2'
Diffstat (limited to 'examples/dining_philosophers.rs')
-rw-r--r--examples/dining_philosophers.rs14
1 files changed, 9 insertions, 5 deletions
diff --git a/examples/dining_philosophers.rs b/examples/dining_philosophers.rs
index 35aa330..dc4dd51 100644
--- a/examples/dining_philosophers.rs
+++ b/examples/dining_philosophers.rs
@@ -1,6 +1,6 @@
use std::{thread, time::Duration};
-use happylock::{LockCollection, Mutex, ThreadKey};
+use happylock::{collection, Mutex, ThreadKey};
static PHILOSOPHERS: [Philosopher; 5] = [
Philosopher {
@@ -50,8 +50,8 @@ impl Philosopher {
thread::sleep(Duration::from_secs(1));
// safety: no philosopher asks for the same fork twice
- let forks =
- unsafe { LockCollection::new_unchecked([&FORKS[self.left], &FORKS[self.right]]) };
+ let forks = [&FORKS[self.left], &FORKS[self.right]];
+ let forks = unsafe { collection::RefLockCollection::new_unchecked(&forks) };
let forks = forks.lock(key);
println!("{} is eating...", self.name);
thread::sleep(Duration::from_secs(1));
@@ -61,9 +61,13 @@ impl Philosopher {
}
fn main() {
- let handles = PHILOSOPHERS
+ let handles: Vec<_> = PHILOSOPHERS
.iter()
- .map(|philosopher| thread::spawn(move || philosopher.cycle()));
+ .map(|philosopher| thread::spawn(move || philosopher.cycle()))
+ // The `collect` is absolutely necessary, because we're using lazy
+ // iterators. If `collect` isn't used, then the thread won't spawn
+ // until we try to join on it.
+ .collect();
for handle in handles {
_ = handle.join();