محدوده تردها

‏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) بگیرید.