2章アトミック操作
アトミックという言葉は、ギリシャ語で不可分を意味するἄτομοςから来ていて、それ以上細かく分割できないものを指す。コンピュータサイエンスの世界では、この言葉は不可分な操作を意味する。つまり、完全に完了するか、全く行われないかのどちらかしか起こらない。
「1.4 借用とデータ競合」で説明したように、複数のスレッドが並行して同じ変数を読み込んで更新すると、通常は未定義の動作になる。しかし、アトミック操作を用いれば複数のスレッドが安全に同じ変数を読み込んで更新することができる。アトミック操作は不可分なので、他の操作の前に完全に行われるか、後に完全に行われるかのどちらかだ。これによって、未定義の動作を避けることができる。「7章 プロセッサを理解する」でこれがハードウェアレベルでどのように実現されているかを説明する。
アトミック操作は、複数のスレッドを用いて何らかのコードを書く際の基本的な構成要素である。Mutexや条件変数などの、他の並行プリミティブはすべて、アトミック操作を用いて実装されている。
Rustではアトミック操作は、std::sync::atomicにある標準のアトミック型のメソッドとして提供されている。これらの型は、AtomicI32やAtomicUsizeのように、すべてAtomicで始まる。使用できる型は、ハードウェアアーキテクチャや、場合によってはオペレーティングシステムに依存するが、ほとんどすべてのプラットフォームで、少なくともポインタのサイズまでのアトミック型は利用できる。
ほとんどの型と異なり、アトミック型は共有参照を通して変更することができる(例えば、&AtomicU8)。「1.5 内部可変性」で説明したように、これが可能なのは内部可変性のおかげだ。 ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access