W.I.S. Laboratory
menu-bar

Rust


Rustに並列処理をさせてみる

Rustはマルチスレッドに強く、しかも安全だ。(ただGoと違ってノンプリエンプティブらしい)
基本的に thread::spawn() 関数にクロージャ(ラムダ式)を渡すことで新しいスレッドが生成できるようだ。
thread::spawn() 関数からはスレッドハンドルが返ってくるのでこれを変数に保持しておくと、例えば unwrap() 関数でそのスレッドの処理が終わるのを待つ、といったことができる。
Rustのクロージャは外側スコープの変数を暗黙的に値キャプチャしてくれるが、クロージャの前に move と書いておくと、所有権を生成したクロージャ側(生成したスレッド側)に移動することができる。
一度移動してしまった所有権は、スレッドを生成したスコープへは返ってこないようなので、それ以後スレッドを生成したスコープでは使用できなくなる。


[ 戻る ]
saluteweb