2013-07-07 8 views
13

複数のスレッドでstd::regexオブジェクトを使用することは可能ですか?std::sregex_iterator,std::regex_matchなどを使用していますか?例えば同時にstd :: regexを使用して、動作を定義しましたか?

、以下では、論理動作を生成します:

bool SomeFunc(const std::string& szString1, const std::string& szString2) 
{ 
    static const std::regex regexTest("=== ([\\w]+) ===", std::regex_constants::optimize); 

    std::future<bool> f = std::async([](std::string szString) { 
     return std::regex_match(szString, regexTest); 
    }, szString1); 

    bool b = std::regex_match(szString2, regexTest); 

    return (b && f.get()); 
} 

私はconst std::regexを使用すると同時に、未定義の動作か結果かどうかを述べて何かを見つけることができません。私が知る限り、正規表現オブジェクトの編集は行われていないので、未定義の動作を同時に使用する必要はありませんか?

ありがとうございます!

答えて

19

はい、const std::regexはスレッドセーフです。実際には、標準ライブラリのconstメソッドはスレッドセーフです。

§17.6.5.9/ 3を参照してください。現在のスレッド 以外のスレッドで直接アクセスできるオブジェクト(1.10)は、Cの標準ライブラリ関数で直接または に変更しないでください。 を介してオブジェクトに直接または間接的にアクセスする場合を除きます。

+0

ありがとう、それは私が考えたものです。私はただの確認をしたかった。 –

+0

@ronagこの仕様を選んだ理由を説明してください。これはC++標準ライブラリの一部ではないクラスでどのように達成されますか?私はそれらの質問に答える時間を見つけることを願っています! :) – Tim

+0

@Tim "_これはC++標準ライブラリの一部ではないクラスではどうですか?_"私はあなたの質問を理解していません... – curiousguy

関連する問題