
231
14
章
マルチスレッド処理
Cプログラムではいくつかのタスクを同時に実行することも多い。例えば次の状況が考
えられる。
●
中間タスクを並列に行う手続きを実行して性能を上げる。
●
時間のかかるデータ通信や「バックグラウンドの」実時間処理をしながらユーザ入力を
扱う。
異なるタスクはプログラムの部分ごとの並行実行で同時に遂行できる。マルチコアプロ
セッサも含めたマルチプロセッサシステムでは、システム資源の有効活用のために並行性
の利点を活かすことがプログラムにとってますます重要になっている。
最近まで、C開発者は並行実行を実装するためにOSまたはライブラリの機能に依存しな
ければならなかった。今や、新しいC11標準が Cプログラミングで並行性をポータブルに
した。C11はマルチスレッド実行、すなわち、プロセスでの制御フローの複数並列経路を
サポートし、モダンOSが提供するのと同じ並行性を用意している。そのために、C
11は適
切なメモリモデルを定義し、アトミック演算をサポートする。ただし、マルチスレッドとア
トミック演算のサポートはC11標準ではオプションだ。C11準拠実装は、対応する機能を
提供しないなら、マクロ
__STDC_NO_THREADS__
と
__STDC_NO_ATOMICS__
が定義済みでなけ
ればならない。
POSIXスレッドのC拡張(pthreads)、すなわち、POSIX(ポータブルOSインタフェース)
標準IEEE 1003.1cを経験済みなら、C11のスレッドプログラミングイン