محدوده تردها
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) بگیرید.