Начало. Библиотека Regex безопасна для потоков, когда Boost: вы можете проверить, что Boost находится в безопасном режиме потоков, проверив, определен ли<BOOST_HAS_THREADS
>: этот макрос автоматически устанавливается системой конфигураций при включении поддержки потоков в вашем компиляторе.
Класс<basic_regex
>и его типдефы regex и wregex безопасны для потоков, в том, что компилируемые регулярные выражения могут безопасно делиться между потоками. Алгоритмы соответствия<regex_match
>,<regex_search
>и<regex_replace
>Все они являются безопасными. Класс<match_results
>теперь является безопасным потоком, поскольку результаты матча могут быть безопасно скопированы из одного потока в другой (например, один поток может находить совпадения и толкать).<match_results
>экземпляры на очереди, в то время как другая нить выталкивает их с другого конца, в противном случае используйте отдельный экземпляр<match_results
>на одну нить.
ФункцииPOSIX APIявляются ре-входящими и безопасными, регулярные выражения, скомпилированные с regcomp, также могут быть разделены между потоками.
КлассRegExбезопасен только в том случае, если каждая нить получает свой собственный экземпляр RegEx (поточность квартир) - это следствие того, что RegEx обрабатывает как компиляцию, так и соответствие регулярных выражений.
Наконец, обратите внимание, что изменение глобальной локализации аннулирует все скомпилированные регулярные выражения, поэтому вызов<set_locale
>из одной нити, в то время как другая использует регулярные выражения, приведет к непредсказуемым результатам.
Существует также требование, что перед началом main() выполняется только один поток.