Are Regex objects thread-safe?

G

Guest

The MSDN documentation about the Regex class seems to have contradictory
information. At the "Remarks" section, the documentation states:

"The Regex class is immutable (read-only) and is inherently thread safe.
Regex objects can be created on any thread and shared between threads. "

However, on the "Thread Safety" section of the same class, the documentation
states:

"Any public static (Shared in Visual Basic) members of this type are thread
safe. Any instance members are not guaranteed to be thread safe.".

So, for instance, if i have an instance of Regex and the only method I will
ever call on it is the instance method "IsMatch()", to validate text input,
can I share this instance across different threads? Can multiple threads
concurrently call "IsMatch()" method on this Regex instance without any major
problem? Or do I need to serialize the calls to "IsMatch()" method in this
case, using the "lock" statement?
 
C

Carl Daniel [VC++ MVP]

mnowosad said:
The MSDN documentation about the Regex class seems to have
contradictory information. At the "Remarks" section, the
documentation states:

"The Regex class is immutable (read-only) and is inherently thread
safe. Regex objects can be created on any thread and shared between
threads. "

However, on the "Thread Safety" section of the same class, the
documentation states:

"Any public static (Shared in Visual Basic) members of this type are
thread safe. Any instance members are not guaranteed to be thread
safe.".

This is boilerplate text that doesn't apply to Regex and should be removed
from this doc page.
So, for instance, if i have an instance of Regex and the only method
I will ever call on it is the instance method "IsMatch()", to
validate text input, can I share this instance across different
threads?
Yes.

Can multiple threads concurrently call "IsMatch()" method on
this Regex instance without any major problem?
Yes.

Or do I need to
serialize the calls to "IsMatch()" method in this case, using the
"lock" statement?

No, no need for anything like that.

-cd
 
G

Guest

Hi Carl,

Thanks for the helpful answer. Yes, Microsoft should rephrase the standard
"Thread Safety" section for classes like Regex. It is confusing and
misleading.

Marcos
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top