スレッドセーフとは?すれっどせーふ
スレッドセーフとは、複数のスレッドから同時に呼び出されても内部の状態が壊れず、期待どおりの結果を返す性質。実現の道は2つあり、共有する状態をそもそも持たないように書くか、持つならミューテックスなどで排他して守るかである。どちらを選ぶかは、排他に伴う待ちとオーバヘッドを払えるかで決まる。
最終更新:2026-10-06
この語が出る過去問を解く →背景
単一のスレッドしか走らなかった時代は、関数の内部で静的な領域を使い回しても誰にも邪魔されなかった。マルチコアが当たり前になると同じ関数が本当に同時に走るため、値を読んで書き戻すまでの隙間に別のスレッドが割り込む。標準ライブラリの古い関数に別名の安全版が用意されているのはこの事情によるもので、応用情報では排他制御が要るかどうかを判断できるかが問われる。
具体例
Javaでは、内部を同期しているVectorやHashtableに対し、同期しないArrayListやHashMapが用意されており、必要なときだけ呼出し側で同期を掛ける設計になっている。組込みでは、動的メモリ確保の関数にミューテックスを持たせるか、非スレッドセーフ版を選んで呼出し側でクリティカルセクションを組むかを選択する。
試験での引っ掛け
個々の関数がスレッドセーフでも、複数の呼出しにまたがる一連の処理は保護されない。存在を確認してから追加する2段階の操作は、あいだに割り込まれれば壊れるので、呼出し側でまとめて排他する必要がある。再入可能(リエントラント)と同義ではなく、ロックで守った関数はスレッドセーフだが再入可能ではない。
関連用語
出た過去問
出典:令和7年度 秋期 応用情報技術者試験 午前 問17(IPA)
スレッドセーフの説明として、適切なものはどれか。
正解:アプリケーションを複数のスレッドで並列に実行しても、問題が生じない。
要点:スレッドセーフは複数スレッドで同時実行しても不整合が起きないこと
スレッドセーフとは、あるコードを複数のスレッドから同時に実行しても、データ競合や不整合といった問題が起きないように設計されていることをいう。共有データへのアクセスを適切に排他制御したり、状態を持たない設計にしたりすることで実現する。
出典・参考
解説は資格暗記が独自に作成しています。過去問の出典は各問題に記載のとおりです。