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,