スコープ付きスレッド
通常のスレッドはそれらの環境から借用することはできません:
use std::thread; fn foo() { let s = String::from("Hello"); thread::spawn(|| { println!("Length: {}", s.len()); }); } fn main() { foo(); }
しかし、そのためにスコープ付きスレッドを使うことができます:
use std::thread; fn foo() { let s = String::from("Hello"); thread::scope(|scope| { scope.spawn(|| { println!("Length: {}", s.len()); }); }); } fn main() { foo(); }
This slide should take about 13 minutes.
- この理由は、関数
thread::scope
が完了するとき、全てのスレッドはjoinされることが保証されているので、スレッドが借用したデータを返すことができるためです。 - 通常のRustの借用のルールが適用されます: 一つのスレッドがミュータブルで借用すること、または任意の数のスレッドからイミュータブルで借用すること。