범위 스레드(Scoped Threads)
보통, 스레드는 스레드 밖에서 데이터를 빌릴 수 없습니다:
use std::thread;
fn foo() {
let s = String::from("안녕하세요");
thread::spawn(|| {
println!("길이: {}", s.len());
});
}
fn main() {
foo();
}
하지만, scoped thread에서는 가능합니다:
use std::thread;
fn main() {
let s = String::from("안녕하세요");
thread::scope(|scope| {
scope.spawn(|| {
println!("길이: {}", s.len());
});
});
}
thread::scope함수가 완료되면 그 안에서 생성된 모든 스레드들이 종료했음이 보장되기 때문에, 그 때 빌렸던 데이터들을 다시 반환할 수 있기 때문입니다.- 일반적인 러스트의 빌림 규칙이 적용됩니다: 한 스레드에 의한 가변 빌림 또는 여러 스레드에 대한 불변 빌림중 하나만 가능합니다.