Struct style::scoped_tls::ScopedTLS

source ·
pub struct ScopedTLS<'scope, T: Send> {
    pool: Option<&'scope ThreadPool>,
    slots: [RefCell<Option<T>>; 6],
}
Expand description

A scoped TLS set, that is alive during the 'scope lifetime.

We use this on Servo to construct thread-local contexts, but clear them once we’re done with restyling.

Note that the cleanup is done on the thread that owns the scoped TLS, thus the Send bound.

Fields§

§pool: Option<&'scope ThreadPool>§slots: [RefCell<Option<T>>; 6]

Implementations§

source§

impl<'scope, T: Send> ScopedTLS<'scope, T>

source

pub fn new(pool: Option<&'scope ThreadPool>) -> Self

Create a new scoped TLS that will last as long as this rayon threadpool reference.

source

pub fn current_thread_index(&self) -> usize

Returns the index corresponding to the calling thread in the thread pool.

source

pub fn borrow(&self) -> Ref<'_, Option<T>>

Return an immutable reference to the Option<T> that this thread owns.

source

pub fn borrow_mut(&self) -> RefMut<'_, Option<T>>

Return a mutable reference to the Option<T> that this thread owns.

source

pub fn ensure<F: FnOnce(&mut Option<T>)>(&self, f: F) -> RefMut<'_, T>

Ensure that the current data this thread owns is initialized, or initialize it using f. We want ensure() to be fast and inline, and we want to inline the memmove that initializes the Option. But we don’t want to inline space for the entire large T struct in our stack frame. That’s why we hand f a mutable borrow to write to instead of just having it return a T.

source

pub fn slots(&mut self) -> &mut [RefCell<Option<T>>]

Returns the slots. Safe because if we have a mut reference the tls can’t be referenced by any other thread.

Trait Implementations§

source§

impl<'scope, T: Send> Sync for ScopedTLS<'scope, T>

The scoped TLS is Sync because no more than one worker thread can access a given slot.

Auto Trait Implementations§

§

impl<'scope, T> !RefUnwindSafe for ScopedTLS<'scope, T>

§

impl<'scope, T> Send for ScopedTLS<'scope, T>

§

impl<'scope, T> Unpin for ScopedTLS<'scope, T>where T: Unpin,

§

impl<'scope, T> !UnwindSafe for ScopedTLS<'scope, T>

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for Twhere U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> IntoEither for T

source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
source§

impl<T> MaybeBoxed<Box<T, Global>> for T

source§

fn maybe_boxed(self) -> Box<T, Global>

Convert
source§

impl<T> MaybeBoxed<T> for T

source§

fn maybe_boxed(self) -> T

Convert
source§

impl<T> Pointable for T

source§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> Erased for T

source§

impl<T> ErasedDestructor for Twhere T: 'static,

source§

impl<T> MaybeSendSync for T