Rust Atomics and Locks を読んだ

TVアニメ『ぼっち・ざ・ろっく!』はとても面白かったですね。年末年始は『結束バンド』のアルバムをひたすら聴いていました。ロック最高!!

anxmusic.lnk.to

さて、"Rock"も良いのですが、"Lock"についても最近面白い話題がありました。 "Rust Atomics and Locks" という、Rust言語を使ってLockなどの低レベル並行ライブラリを実装してみることで、CPUアーキテクチャにまで踏み込んだ並行プログラミングについて学ぶことができる本が出版されます(電子版は既に入手可能)。

marabos.nl

この著者は実際にRustのMutexやCondvarなどの改良に携わっており、それらを実装するために使われた知識がこの本には満載されています。

この本ではコードは基本的にRustで書かれていますが、最初の第1章でRust言語の並行性に関わる機能が解説されているので、Rustにそれほど詳しくない人でも読むことができると思います。

低レベル並行ライブラリを実装するために必須となるAtomic変数とメモリモデルについては、それぞれ一章ずつ使って詳しく説明されています(2章および 3章)。また、これらが実際のCPU上でどのように動作しているかについて、x86-64とARM64を例にして具体的なサンプルコードやベンチマークなどを用いた説明がまるまる一章あります(7章)。この辺りは、私のブログの過去記事で触れた内容をより深く解説しているものになります。

yamasa.hatenablog.jp
yamasa.hatenablog.jp
yamasa.hatenablog.jp

4, 5, 6章では、実際にAtomic変数を用いてSpin Lock、Channels、Arc(並行参照カウント)を実装してみています。ここでは、ライフタイムなどを意識したよりRustらしいコードにするための方法についても詳しく説明されています。
Spin Lockではない普通のLockでは、ロックが競合したときにスレッドの実行を止めたり再開させたりしなければなりません。これはAtomic変数だけでは実現できないので、カーネルが提供する機能が必要になります。8章では、このスレッドの待機に関わる機能が、LinuxMacOSWindowsでどのように提供されているかを解説しています。
そして9章でいよいよ、MutexやCondition Variable(条件変数)、Reader-Writer Lockなどを実装していきます。ここまで読めば、Atomic変数を使った複雑なコードも理解できるようになるでしょう。

最後の第10章では、より発展的な話題としてLock-Freeアルゴリズムなどが紹介されています。

Rust Atomics and Locksは私がこのブログでいずれ書きたいなと思っていたことをほとんど全て網羅した上で詳細かつわかりやすく解説している素晴らしい本ですので、私のブログの過去記事を読んで興味を持った人は是非この本も読んでみてください。ロック最高!!

追記(1/7):
この本の内容がWeb上で無料で読めるようになったそうです!