スレッド安全性
Boost がスレッド安全であれば、Boost.Regex はスレッド安全である。Boost がスレッド安全モードであるかどうか確認するには、BOOST_HAS_THREADS
が定義されているか調べるとよい。コンパイラがスレッドのサポートを有効にしていれば、設定システムがこのマクロを自動的に定義する。
basic_regex
クラスとその typedef である regex
、wregex
は、コンパイル済み正規表現がスレッド間で安全に共有可能という意味でスレッド安全である。マッチアルゴリズム regex_match
、regex_search
および regex_replace
はすべて再入可能かつスレッド安全である。match_results
クラスは、マッチ結果をあるスレッドから別のスレッドへ安全にコピー(例えばあるスレッドがマッチを検索して match_results
インスタンスをキューに追加し、同時に別のスレッドが同じキューをポップすることが)可能という意味では、スレッド安全である。それ以外の場合はスレッドごとに個別の match_results
インスタンスを使用しなければならない。
POSIX API 関数はすべて再入可能かつスレッド安全であり、regcomp
でコンパイルした正規表現もスレッド間で共有可能である。
RegEx
クラスは、各スレッドが RegEx
インスタンスを保持する場合のみスレッド安全である(アパートメントスレッディング)。これは RegEx
が正規表現のコンパイルとマッチの両方を処理するためである。
最後に、大域ロカールを変更するとあらゆるコンパイル済み正規表現が無効になるため、あるスレッドで正規表現を使用しているときに別のスレッドが setlocale
を呼び出すと予期しない結果となることに注意していただきたい。
また main
の開始前は、実行中のスレッドは 1 つだけでなければならないという要件がある。