scope — 스코프드 스레드 생성 함수

scope — 스코프드 스레드 생성 함수

scope는 스코프드 스레드(scoped thread)를 생성하는 함수예요. 스코프가 끝날 때 모든 스레드가 자동으로 조인됩니다.

출처: Rust 공식 문서

본문

pub fn scope<'env, F, T>(f: F) -> T
where
    F: FnOnce(&Scope<'_, 'env>) -> T,

f 클로저 안에서 Scope::spawn으로 스레드를 생성하면, 스코프가 끝날 때 모든 스레드가 자동으로 조인(join)돼요. 이로써 스레드에 빌린 데이터('env)를 안전하게 전달할 수 있어요.

use std::thread;

thread::scope(|s| {
    let hello = "hello";
    s.spawn(|| {
        println!("{hello} from a scoped thread!");
    });
});

JoinHandle과 달리 스코프 범위를 벗어나기 전에 스레드가 끝나도록 보장하며, 패닉이 발생하면 스코프에서 전파돼요.

함께 보기: Scope 구조체

pub struct Scope<'scope, 'env: 'scope> { /* private fields */ }

Scope는 스코프드 스레드를 생성하는 데 사용하는 범위(scope)이며, thread::scope가 전달하는 클로저의 인자 타입이에요. env 수명으로 빌린 데이터를 안전하게 스레드에 전달할 수 있고, 스코프가 끝나면 모든 스레드가 자동으로 조인돼요.

// 이 스코프 안에서 새 스레드를 생성해요.
pub fn spawn<F, T>(&'scope self, f: F) -> ScopedJoinHandle<'scope, T>
where
    F: FnOnce() -> T + Send + 'scope,
    T: Send + 'scope,

더 알아보기 (Learn more)