محدوده تردها
threadهای معمولی نمیتوانند از محیط خود قرض (borrow) بگیرند:
use std::thread;
fn foo() {
let s = String::from("سلام");
thread::spawn(|| {
println!("Length: {}", s.len());
});
}
fn main() {
foo();
}
بههرحال, میتوانید برای این مورد scoped thread ببینید:
use std::thread;
fn main() {
let s = String::from("سلام");
thread::scope(|scope| {
scope.spawn(|| {
println!("Length: {}", s.len());
});
});
}
This slide should take about 13 minutes.
- دلیل آن این است که وقتی تابع «thread::scope» کامل میشود، اتصال همه threadها تضمین میشود، بنابراین میتوانند دادههای قرضی را برگردانند.
- قوانین عادی قرضگیری Rust اعمال میشود: شما میتوانید بهصورت تغییرپذیر(mutable) با یک thread یا غیرقابل تغییر (immutable) با هر تعداد thread قرض (borrow) بگیرید.