5

固定のboost::wregexで静的/グローバル変数を宣言し、正規表現の内部状態を気にせずに複数のスレッドから使​​用しても安全ですか(BoostがBOOST_HAS_THREADSでコンパイルされている場合)?

例えば

boost::wregex g_regex( L"common|test" );

次に、複数のスレッドを呼び出します。

if ( boost::regex_search( test_str, g_regex ) )
...
4

1 に答える 1

4

http://www.boost.org/doc/libs/1_51_0/libs/regex/doc/html/boost_regex/background_information/thread_safety.html

クラス basic_regex とその typedefs regex および wregex は、コンパイルされた正規表現をスレッド間で安全に共有できるという点で、スレッド セーフです。マッチング アルゴリズム regex_match、regex_search、および regex_replace はすべて再入可能でスレッド セーフです。クラス match_results はスレッド セーフになりました。つまり、一致の結果をあるスレッドから別のスレッドに安全にコピーできます (たとえば、あるスレッドが一致を見つけて match_results インスタンスをキューにプッシュし、別のスレッドがそれらを反対側からポップすることができます)。それ以外の場合は、スレッドごとに match_results の個別のインスタンスを使用してください。

于 2012-09-04T12:01:40.907 に答える