From fdf935a5249edd0be0f14385a099963e43c7a29b Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Tue, 20 May 2014 18:54:31 -0700 Subject: std,green: Mark some queue types as NoShare --- src/libstd/sync/deque.rs | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'src/libstd/sync') diff --git a/src/libstd/sync/deque.rs b/src/libstd/sync/deque.rs index c6446775b0c..a3fdc4d3eaf 100644 --- a/src/libstd/sync/deque.rs +++ b/src/libstd/sync/deque.rs @@ -53,16 +53,17 @@ use alloc::arc::Arc; use clone::Clone; use iter::{range, Iterator}; use kinds::Send; +use kinds::marker; use mem::{forget, min_align_of, size_of, transmute}; use ops::Drop; use option::{Option, Some, None}; use owned::Box; use ptr::RawPtr; use ptr; +use rt::heap::{allocate, deallocate}; use slice::ImmutableVector; use sync::atomics::{AtomicInt, AtomicPtr, SeqCst}; use unstable::sync::Exclusive; -use rt::heap::{allocate, deallocate}; use vec::Vec; // Once the queue is less than 1/K full, then it will be downsized. Note that @@ -89,6 +90,7 @@ struct Deque { /// There may only be one worker per deque. pub struct Worker { deque: Arc>, + noshare: marker::NoShare, } /// The stealing half of the work-stealing deque. Stealers have access to the @@ -96,6 +98,7 @@ pub struct Worker { /// `steal` method. pub struct Stealer { deque: Arc>, + noshare: marker::NoShare, } /// When stealing some data, this is an enumeration of the possible outcomes. @@ -153,7 +156,8 @@ impl BufferPool { pub fn deque(&self) -> (Worker, Stealer) { let a = Arc::new(Deque::new(self.clone())); let b = a.clone(); - (Worker { deque: a }, Stealer { deque: b }) + (Worker { deque: a, noshare: marker::NoShare }, + Stealer { deque: b, noshare: marker::NoShare }) } fn alloc(&self, bits: int) -> Box> { @@ -219,7 +223,9 @@ impl Stealer { } impl Clone for Stealer { - fn clone(&self) -> Stealer { Stealer { deque: self.deque.clone() } } + fn clone(&self) -> Stealer { + Stealer { deque: self.deque.clone(), noshare: marker::NoShare } + } } // Almost all of this code can be found directly in the paper so I'm not -- cgit 1.4.1-3-g733a5