Enum scheduler::SchedulerScope

source ·
pub enum SchedulerScope<'sched, 'pool, 'scope, HostType: Host> {
    ThreadPerHost(SchedulerScope<'pool, 'scope, HostType>),
    ThreadPerCore(SchedulerScope<'sched, 'pool, 'scope, HostType>),
}
Expand description

A scope for any task run on the scheduler.

Variants§

§

ThreadPerHost(SchedulerScope<'pool, 'scope, HostType>)

§

ThreadPerCore(SchedulerScope<'sched, 'pool, 'scope, HostType>)

Implementations§

source§

impl<'sched, 'pool, 'scope, HostType: Host> SchedulerScope<'sched, 'pool, 'scope, HostType>

source

pub fn run(self, f: impl Fn(usize) + Sync + Send + 'scope)

Run the closure on all threads. The closure is given an index of the currently running thread.

source

pub fn run_with_hosts( self, f: impl Fn(usize, &mut HostIter<'_, '_, HostType>) + Send + Sync + 'scope, )

Run the closure on all threads. The closure is given an index of the currently running thread and a host iterator.

The closure must iterate over the provided HostIter to completion (until next() returns None), otherwise this may panic. The host iterator is not a real std::iter::Iterator, but rather a fake iterator that behaves like a streaming iterator.

source

pub fn run_with_data<T>( self, data: &'scope [T], f: impl Fn(usize, &mut HostIter<'_, '_, HostType>, &T) + Send + Sync + 'scope, )
where T: Sync,

Run the closure on all threads. The closure is given an index of the currently running thread, a host iterator, and an element of data.

The closure must iterate over the provided HostIter to completion (until next() returns None), otherwise this may panic. The host iterator is not a real std::iter::Iterator, but rather a fake iterator that behaves like a streaming iterator.

Each call of the closure will be given an element of data, and this element will not be given to any other thread while this closure is running, which means you should not expect any contention on this element if using interior mutability. The provided slice must have a length of at least Scheduler::parallelism. If the data needs to be initialized, it should be initialized before calling this function and not at the beginning of the closure. The element may be given to multiple threads, but never two threads at the same time.

Auto Trait Implementations§

§

impl<'sched, 'pool, 'scope, HostType> Freeze for SchedulerScope<'sched, 'pool, 'scope, HostType>

§

impl<'sched, 'pool, 'scope, HostType> !RefUnwindSafe for SchedulerScope<'sched, 'pool, 'scope, HostType>

§

impl<'sched, 'pool, 'scope, HostType> Send for SchedulerScope<'sched, 'pool, 'scope, HostType>

§

impl<'sched, 'pool, 'scope, HostType> Sync for SchedulerScope<'sched, 'pool, 'scope, HostType>

§

impl<'sched, 'pool, 'scope, HostType> Unpin for SchedulerScope<'sched, 'pool, 'scope, HostType>

§

impl<'sched, 'pool, 'scope, HostType> !UnwindSafe for SchedulerScope<'sched, 'pool, 'scope, HostType>

Blanket Implementations§

source§

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

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

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

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where 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 T
where 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> Pointable for T

source§

const ALIGN: usize = _

The alignment of pointer.
source§

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, U> TryFrom<U> for T
where U: Into<T>,

source§

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 T
where U: TryFrom<T>,

source§

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.