静态boost :: wregex实例是否是线程安全的?

时间:2012-09-04 11:57:11

标签: c++ boost

使用固定的boost :: wregex声明静态/全局变量然后从多个线程使用它而不用担心正则表达式的内部状态(如果Boost已使用BOOST_HAS_THREADS编译)是否安全?

e.g。

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

然后有多个线程调用:

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

1 个答案:

答案 0 :(得分:4)

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

类basic_regex及其typedef regex和wregex是线程安全的,因为编译的正则表达式可以在线程之间安全地共享。匹配算法regex_match,regex_search和regex_replace都是可重入且线程安全的。类match_results现在是线程安全的,因为匹配的结果可以安全地从一个线程复制到另一个线程(例如一个线程)可以找到匹配项并将match_results实例推送到队列中,而另一个线程将它们从另一端弹出),否则每个线程使用一个单独的match_results实例。