|
dev
newsgroups
|
|||||||||||||||||||||||
|
|||||||||||||||||||||||
Are Regex objects thread-safe?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? mnowosad wrote:
Show quote > The MSDN documentation about the Regex class seems to have This is boilerplate text that doesn't apply to Regex and should be removed > 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.". from this doc page. > So, for instance, if i have an instance of Regex and the only method Yes.> 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 Yes.> this Regex instance without any major problem? > Or do I need to No, no need for anything like that.> serialize the calls to "IsMatch()" method in this case, using the > "lock" statement? -cd 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 Show quote "Carl Daniel [VC++ MVP]" wrote: > mnowosad wrote: > > 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 > > > |
|||||||||||||||||||||||