Можно ли использовать регулярные выражения в многопоточной программе без блокировки
Разные, да.
могу ли я использовать одно и то же regex_t одновременно в нескольких потоках?
В целом: если вы планируете сделать это, вам придется выполнить блокировку вокруг функций, поскольку лишь немногие структуры данных выполняют блокировку за вас.
regexec: Поскольку regexec, однако, принимает const
regex_t, выполнение regexec кажется безопасным для одновременного выполнения без блокировки. (В конце концов, это POSIX.1-2001, где такие глупые вещи, как статические буферы, которые использовались в ранних API BSD, больше не встречаются.)