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>
impl<'scope, T: Send> ScopedTLS<'scope, T>
Sourcepub fn new(pool: Option<&'scope ThreadPool>) -> Self
pub fn new(pool: Option<&'scope ThreadPool>) -> Self
Create a new scoped TLS that will last as long as this rayon threadpool reference.
Sourcepub fn current_thread_index(&self) -> usize
pub fn current_thread_index(&self) -> usize
Returns the index corresponding to the calling thread in the thread pool.
Sourcepub fn borrow(&self) -> Ref<'_, Option<T>>
pub fn borrow(&self) -> Ref<'_, Option<T>>
Return an immutable reference to the Option<T> that this thread owns.
Sourcepub fn borrow_mut(&self) -> RefMut<'_, Option<T>>
pub fn borrow_mut(&self) -> RefMut<'_, Option<T>>
Return a mutable reference to the Option<T> that this thread owns.
Sourcepub fn ensure<F: FnOnce(&mut Option<T>)>(&self, f: F) -> RefMut<'_, T>
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 Optionf a mutable borrow to write to instead of just
having it return a T.
Trait Implementations§
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> !Freeze for ScopedTLS<'scope, T>
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> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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