14

std::regex是否可以在多个线程中都使用std::sregex_iterator,std::regex_match等来使用一个对象?

例如,以下是否会产生逻辑行为:

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同时使用是否会导致未定义行为的内容。据我所知,没有对正则表达式对象进行任何编辑,因此不应该通过同时使用它来引发未定义的行为?

提前致谢!

4

1 回答 1

19

是的, aconst std::regex是线程安全的。实际上,标准库中的任何 const 方法都是线程安全的,请参见:

§17.6.5.9/3。C++ 标准库函数不得直接或间接修改可由当前线程以外的线程访问的对象 (1.10),除非通过函数的非 const 参数直接或间接访问对象,包括 this。

于 2013-07-07T19:43:17.830 回答