join_many test
This commit is contained in:
parent
0db285a4a9
commit
c3eb71dbb1
|
@ -301,6 +301,27 @@ mod tests {
|
||||||
assert_eq!(a, 18);
|
assert_eq!(a, 18);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn join_many() {
|
||||||
|
let pool = ThreadPool::new_with_threads(1);
|
||||||
|
|
||||||
|
fn sum<'scope, 'env>(scope: &'scope Scope<'scope, 'env>, n: usize) -> usize {
|
||||||
|
if n == 0 {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
let (l, r) = scope.join(|s| sum(s, n - 1), |s| sum(s, n - 1));
|
||||||
|
|
||||||
|
l + r + 1
|
||||||
|
}
|
||||||
|
|
||||||
|
pool.scope(|scope| {
|
||||||
|
let total = sum(scope, 5);
|
||||||
|
assert_eq!(total, 31);
|
||||||
|
// eprintln!("Total sum: {}", total);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn spawn_future() {
|
fn spawn_future() {
|
||||||
let pool = ThreadPool::new_with_threads(1);
|
let pool = ThreadPool::new_with_threads(1);
|
||||||
|
@ -315,4 +336,21 @@ mod tests {
|
||||||
|
|
||||||
assert_eq!(x, 1);
|
assert_eq!(x, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn spawn_many() {
|
||||||
|
let pool = ThreadPool::new_with_threads(1);
|
||||||
|
let count = Arc::new(AtomicU8::new(0));
|
||||||
|
|
||||||
|
pool.scope(|scope| {
|
||||||
|
for _ in 0..10 {
|
||||||
|
let count = count.clone();
|
||||||
|
scope.spawn(move |_| {
|
||||||
|
count.fetch_add(1, std::sync::atomic::Ordering::SeqCst);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
assert_eq!(count.load(std::sync::atomic::Ordering::SeqCst), 10);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -111,6 +111,10 @@ impl WorkerThread {
|
||||||
self.tick();
|
self.tick();
|
||||||
}
|
}
|
||||||
crate::latch::WakeResult::Set => {
|
crate::latch::WakeResult::Set => {
|
||||||
|
// check if we should exit the thread
|
||||||
|
if self.context.shared().should_exit() {
|
||||||
|
break 'outer;
|
||||||
|
}
|
||||||
panic!("this thread shouldn't be woken by a finished job")
|
panic!("this thread shouldn't be woken by a finished job")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -354,6 +358,7 @@ impl WorkerThread {
|
||||||
self.index,
|
self.index,
|
||||||
latch
|
latch
|
||||||
);
|
);
|
||||||
|
self.heartbeat().latch.as_core_latch().unset();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -86,6 +86,7 @@ fn join_distaff() {
|
||||||
let sum = sum(&tree, tree.root().unwrap(), s);
|
let sum = sum(&tree, tree.root().unwrap(), s);
|
||||||
sum
|
sum
|
||||||
});
|
});
|
||||||
|
eprintln!("sum: {sum}");
|
||||||
std::hint::black_box(sum);
|
std::hint::black_box(sum);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue