3章3章 同期処理1

 この世の中は並行に物事が進んでいる。例えば車は道路の上をめいめい独立に走行している。しかし、完全に独立しているかというとそうではなく、信号やルールによって一定の協調を強いられている。協調的に動作することで、多くの車が混乱なく走行することが可能になる。並行プログラミングでも、複数のプロセス間で協調動作が必要なのは同じであり、タイミングの同期やデータ更新などを複数のプロセス間で協調的に行うような処理のことを同期処理と呼ぶ。本章では、並行プログラミングの基本的な要素である同期処理について、そのハードウェア的なメカニズムからアルゴリズムまでを説明する。

 本章では、まずはじめに、なぜ同期処理が必要なのか、つまりレースコンディションについて説明し、C言語とアセンブリを用いて、現代的なCPUで利用可能なアトミック演算命令とアトミック処理について説明する。また、同期処理の基本であるミューテックス、セマフォ、条件変数、バリア同期、Readers-Writerロック、Pthreadsについて説明する。C言語とアセンブリを用いることで、原始的な命令と関数についての理解が深まる。

 その後、Rust言語の同期処理ライブラリについて現代的な同期処理手法について説明する。原始的な命令と関数でも同期処理は行えるが、そこにはいくつもの落とし穴がある。一方、Rust言語では同期処理で陥りがちなミスを型システムにより防ぐことができる。現代のプログラマには是非これらを習得してほしい。CとRustの同期処理手法を対比して学ぶことで、Rustの先進的な同期処理手法に関する理解が深まる。最後に、アトミック命令に依存しない代表的な同期処理アルゴリズムであるパン屋のアルゴリズムを紹介する。

Rust言語の同期処理ライブラリは裏側でPthreadsを利用している。並行プログラミングのしくみを知るという意味で、はじめにC言語でPthreadsの説明を行う。 ...

Get 並行プログラミング入門 ―Rust、C、アセンブリによる実装からのアプローチ now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.