diff --git a/src/praetor/mod.rs b/src/praetor/mod.rs index 32fdf8d..2ec47a6 100644 --- a/src/praetor/mod.rs +++ b/src/praetor/mod.rs @@ -752,6 +752,7 @@ use std::{ time::Duration, }; +use crossbeam::utils::CachePadded; use job::*; use parking_lot::{Condvar, Mutex}; use util::DropGuard; @@ -760,7 +761,7 @@ pub struct Scope { join_count: Cell, context: Arc, index: usize, - heartbeat: Arc, + heartbeat: Arc>, queue: UnsafeCell, } @@ -1058,7 +1059,7 @@ struct Context { struct SharedContext { jobs: BTreeMap>, - heartbeats: BTreeMap>, + heartbeats: BTreeMap>>, // monotonic increasing id heartbeats_id: usize, should_stop: bool, @@ -1067,11 +1068,11 @@ struct SharedContext { unsafe impl Send for SharedContext {} impl SharedContext { - fn new_heartbeat(&mut self) -> (Arc, usize) { + fn new_heartbeat(&mut self) -> (Arc>, usize) { let index = self.heartbeats_id; self.heartbeats_id.checked_add(1).unwrap(); - let is_set = Arc::new(AtomicBool::new(false)); + let is_set = Arc::new(CachePadded::new(AtomicBool::new(false))); let weak = Arc::downgrade(&is_set); self.heartbeats.insert(index, weak);