W.I.S. Laboratory
menu-bar

Rust


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

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


[ 戻る ]
saluteweb