Подтвердить что ты не робот

Одновременно с использованием std:: regex, определенного поведения?

Можно ли использовать объект 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 приводит к поведению undefined или нет. Насколько я могу судить, никакие изменения не редактируются для объекта регулярного выражения, поэтому поведение undefined должно быть вызвано одновременным использованием его?

Спасибо заранее!

4b9b3361

Ответ 1

Да, a const std::regex является потокобезопасным. Фактически любой метод const в стандартной библиотеке является потокобезопасным, см.

§17.6.5.9/3. Стандартная библиотечная функция С++ не должна напрямую или косвенно изменять объекты (1.10), доступные для потоков, отличных от текущая нить, если объекты не доступны прямо или косвенно через функции non-const аргументы, включая это.