Я не знаю о безопасности потоков в вашем случае. Но, глядя на вашу ситуацию, я бы сказал, что это скорее всего проблема в самом регулярном выражении. Это будет первое, на что я посмотрю. Можно создать регулярное выражение, которое само по себе вызывает переполнение стека или очень очень длительное время выполнения из-за квантификаторов и перезапусков.
С справочная страница pcre :
When a pattern contains an unlimited repeat inside a subpattern that
can itself be repeated an unlimited number of times, the use of an
atomic group is the only way to avoid some failing matches taking a
very long time indeed. The pattern
(\D+|<\d+>)*[!?]
matches an unlimited number of substrings that either consist of non-
digits, or digits enclosed in <>, followed by either ! or ?. When it
matches, it runs quickly. However, if it is applied to
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
it takes a long time before reporting failure. This is because the
string can be divided between the internal \D+ repeat and the external
* repeat in a large number of ways, and all have to be tried. (The
example uses [!?] rather than a single character at the end, because
both PCRE and Perl have an optimization that allows for fast failure
when a single character is used. They remember the last single charac-
ter that is required for a match, and fail early if it is not present
in the string.)
Теперь объект RegExp, доступный на хосте скриптов Windows, не является pcre, но я полагаю, что к нему должно применяться то же поведение.
Итак, проверьте свое регулярное выражение на наличие вложенных неограниченных квантификаторов.