这里实际上有两个不同的问题:我能在多线程程序中使用正则表达式而不需要锁定吗?如果可以的话,我能同时在多个线程中使用同一个regex_t吗?我在Google或manpages上找不到答案。
http://www.opengroup.org/onlinepubs/9699919799/functions/V2_chap02.html
2.9.1 线程安全性
本卷中定义的所有函数均应该是线程安全的,但以下函数1除外,它们不需要是线程安全的。
...
regexec
和 regcomp
不在上述列表中,因此它们需要是线程安全的。
另请参阅:http://www.opengroup.org/onlinepubs/9699919799/functions/regcomp.html
部分原理文本如下:
接口被定义为匹配子字符串 rm_sp 和 rm_ep 在一个单独的 regmatch_t 结构中而不是 regex_t 中。这使得单个编译后的正则表达式可以同时在多个上下文中使用;例如在主函数和信号处理程序中,或者在多个轻量级进程的线程中。