スレッドセーフとは?すれっどせーふ
スレッドセーフとは、同じ関数が複数のタスクやスレッドから同時に呼ばれても、内部で持つデータが壊れず期待どおりの結果を返す、というライブラリ側が宣言する性質。実現は共有状態を持たないか、持つなら内部で排他をかけるかの二択で、保証が及ぶのは1回の呼出しまでである。
最終更新:2026-10-06
エンベデッドSPを最短で暗記・合格する →背景
ライブラリの中に隠れた静的変数があると、呼ぶ側からは見えないまま値が壊れる。strtokやerrnoの扱いが古くから問題になったのはこれで、呼出し側の努力では防げないため、性質としてライブラリ側が宣言する形になった。ただし組込みでは、保護に使うミューテックスがそのままオーバヘッドと優先度逆転の種になるので、宣言されていることが常に嬉しいわけではない。
具体例
ヒープを共有するmallocは、内部にロックを持たせてスレッドセーフにする実装が多い。newlibはそのロックをフックとして外へ出しており、組込みではロック無しの構成を選んでオーバヘッドを削り、呼出し側でクリティカルセクションを組むという判断も採れる。
試験での引っ掛け
個々の関数がスレッドセーフでも、複数回の呼出しにまたがる一連の処理は守られない。読んでから書く2段階の操作は、あいだに割り込まれれば壊れるので呼出し側でまとめて囲う。リエントラント(再入可能)とは別概念で、割込みハンドラの中から呼べるかどうかはこちらで決まる。
関連用語
出典・参考
解説は資格暗記が独自に作成しています。過去問の出典は各問題に記載のとおりです。