범위 스레드(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
함수가 완료되면 그 안에서 생성된 모든 스레드들이 종료했음이 보장되기 때문에, 그 때 빌렸던 데이터들을 다시 반환할 수 있기 때문입니다.- 일반적인 러스트의 빌림 규칙이 적용됩니다: 한 스레드에 의한 가변 빌림 또는 여러 스레드에 대한 불변 빌림중 하나만 가능합니다.