スレッド安全性

Boost がスレッド安全であれば、Boost.Regex はスレッド安全である。Boost がスレッド安全モードであるかどうか確認するには、BOOST_HAS_THREADS が定義されているか調べるとよい。コンパイラがスレッドのサポートを有効にしていれば、設定システムがこのマクロを自動的に定義する。

basic_regex クラスとその typedef である regexwregex は、コンパイル済み正規表現がスレッド間で安全に共有可能という意味でスレッド安全である。マッチアルゴリズム regex_matchregex_search および regex_replace はすべて再入可能かつスレッド安全である。match_results クラスは、マッチ結果をあるスレッドから別のスレッドへ安全にコピー(例えばあるスレッドがマッチを検索して match_results インスタンスをキューに追加し、同時に別のスレッドが同じキューをポップすることが)可能という意味では、スレッド安全である。それ以外の場合はスレッドごとに個別の match_results インスタンスを使用しなければならない。

POSIX API 関数はすべて再入可能かつスレッド安全であり、regcomp でコンパイルした正規表現もスレッド間で共有可能である。

RegEx クラスは、各スレッドが RegEx インスタンスを保持する場合のみスレッド安全である(アパートメントスレッディング)。これは RegEx が正規表現のコンパイルとマッチの両方を処理するためである。

最後に、大域ロカールを変更するとあらゆるコンパイル済み正規表現が無効になるため、あるスレッドで正規表現を使用しているときに別のスレッドが setlocale を呼び出すと予期しない結果となることに注意していただきたい。

また main の開始前は、実行中のスレッドは 1 つだけでなければならないという要件がある。