少し古いが、結城浩先生の『増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編』という本がある。
RustでasyncAsync BookやTokioのドキュメントを読もうとして、Rustのstdに入っているsyncモジュールやtheradモジュールの使い方を曖昧にしか理解していないと思ったので、練習としてstdのAPIだけを使って、この本で紹介されているマルチスレッドプログラミングのデザインパターン12種類をRustで書き直してみた。
やってみて、syncのMutex
, Arc
, Condvar
やthreadのspawn
, scope
などの使い方のパターンを把握できた。また、"Fealess Concurrency in Rust"などでも触れられているように、Rustのロックはデータ自体を包む。本のサンプルコードはJavaなのでsynchronized
を使っているのもあって、コードブロック単位で排他制御するJavaと、そうではなく排他制御するデータ自体が明示されるRustとの違いがよくわかった(Rustのほうが好み)。
Read-Write Lockはstd::sync::RwLock
を使って済ませている一方で、Futureは本で紹介されている方式で自前実装したりとやや取り組みにムラがあるが、総じて勉強になった。
他のRust並行プログラミング関連のリソースも読んでいこうと思う。