Scope in rustc_thread_pool::scope - Rust
Description: Represents a fork-join scope which can be used to spawn any number of tasks. See `scope()` for more information.

Skip to main content

## Scope

# Struct Scope

Source

    pub struct Scope<'scope> {
        base: ScopeBase<'scope>,
    }

Expand description

Represents a fork-join scope which can be used to spawn any number of tasks. See `scope()` for more information.

## Fields§

§`base: ScopeBase<'scope>`

## Implementations§

Source§

### impl<'scope> Scope<'scope>

Source

#### fn new(owner: Option<&WorkerThread>, registry: Option<&Arc<Registry>>) -> Self

Source

#### pub fn spawn<BODY>(&self, body: BODY)
where BODY: FnOnce(&Scope<'scope>) + Send + 'scope,

Spawns a job into the fork-join scope `self`. This job will execute sometime before the fork-join scope completes. The job is specified as a closure, and this closure receives its own reference to the scope `self` as argument. This can be used to inject new jobs into `self`.

##### §Returns

Nothing. The spawned closures cannot pass back values to the caller directly, though they can write to local variables on the stack (if those variables outlive the scope) or communicate through shared channels.

(The intention is to eventually integrate with Rust futures to support spawns of functions that compute a value.)

##### §Examples

    let mut value_a = None;
    let mut value_b = None;
    let mut value_c = None;
    rayon::scope(|s| {
        s.spawn(|s1| {
            //   ^ this is the same scope as `s`; this handle `s1`
            //     is intended for use by the spawned task,
            //     since scope handles cannot cross thread boundaries.

            value_a = Some(22);

            // the scope `s` will not end until all these tasks are done
            s1.spawn(|_| {
                value_b = Some(44);
            });
        });

        s.spawn(|_| {
            value_c = Some(66);
        });
    });
    assert_eq!(value_a, Some(22));
    assert_eq!(value_b, Some(44));
    assert_eq!(value_c, Some(66));

##### §See also

The `scope` function has more extensive documentation about task spawning.

Source

#### pub fn spawn_broadcast<BODY>(&self, body: BODY)
where BODY: Fn(&Scope<'scope>, BroadcastContext<'_>) + Send + Sync + 'scope,

Spawns a job into every thread of the fork-join scope `self`. This job will execute on each thread sometime before the fork-join scope completes. The job is specified as a closure, and this closure receives its own reference to the scope `self` as argument, as well as a `BroadcastContext`.

## Trait Implementations§

Source§

### impl<'scope> Debug for Scope<'scope>

Source§

#### fn fmt(&self, fmt: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

## Auto Trait Implementations§

§

### impl<'scope> !Freeze for Scope<'scope>

§

### impl<'scope> !RefUnwindSafe for Scope<'scope>

§

### impl<'scope> Send for Scope<'scope>

§

### impl<'scope> Sync for Scope<'scope>

§

### impl<'scope> Unpin for Scope<'scope>

§

### impl<'scope> UnsafeUnpin for Scope<'scope>

§

### impl<'scope> !UnwindSafe for Scope<'scope>

## 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.

## Layout§

Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain `repr(...)` attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.

Size: 128 bytes