From bf0e6eb346665d779ad012f7def9b4948c5c6b26 Mon Sep 17 00:00:00 2001 From: Jason Toffaletti Date: Fri, 4 Oct 2013 01:25:55 -0700 Subject: add cache line padding --- src/libstd/rt/mpsc_queue.rs | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) (limited to 'src/libstd/rt') diff --git a/src/libstd/rt/mpsc_queue.rs b/src/libstd/rt/mpsc_queue.rs index 57b7d4f469b..09b148940f8 100644 --- a/src/libstd/rt/mpsc_queue.rs +++ b/src/libstd/rt/mpsc_queue.rs @@ -56,9 +56,13 @@ impl Default for Node { } struct State { - stub: Node, + pad0: [u8, ..64], head: AtomicPtr>, + pad1: [u8, ..64], + stub: Node, + pad2: [u8, ..64], tail: *mut Node, + pad3: [u8, ..64], } struct Queue { @@ -82,9 +86,13 @@ impl fmt::Default for Queue { impl Queue { pub fn new() -> Queue { let mut q = Queue{state: UnsafeArc::new(State { - stub: Default::default(), + pad0: [0, ..64], head: AtomicPtr::new(mut_null()), + pad1: [0, ..64], + stub: Default::default(), + pad2: [0, ..64], tail: mut_null(), + pad3: [0, ..64], })}; let stub = q.get_stub_unsafe(); q.get_head().store(stub, Relaxed); @@ -102,7 +110,7 @@ impl Queue { fn push_node(&mut self, node: *mut Node) { unsafe { (*node).next.store(mut_null(), Release); - let prev = (*self.state.get()).head.swap(node, Relaxed); + let prev = self.get_head().swap(node, Relaxed); (*prev).next.store(node, Release); } } @@ -167,7 +175,6 @@ mod tests { use option::*; use task; use comm; - use fmt; use super::Queue; #[test] -- cgit 1.4.1-3-g733a5