正規表現におけるスレッド セーフThread Safety in Regular Expressions

Regex クラス自体はスレッド セーフであり、変更できません (読み取り専用)。The Regex class itself is thread safe and immutable (read-only). つまり、Regex オブジェクトは任意のスレッドで作成できます。また、スレッド間で共有できます。一致するメソッドは任意のスレッドから呼び出すことができますが、グローバルな状態を変更することはできません。That is, Regex objects can be created on any thread and shared between threads; matching methods can be called from any thread and never alter any global state.

ただし、Regex から返された結果オブジェクト (MatchMatchCollection) は、単一のスレッドで使用する必要があります。However, result objects (Match and MatchCollection) returned by Regex should be used on a single thread. これらのオブジェクトの多くは、論理的に変更できませんが、実装によってパフォーマンスを改善するために一部の結果の演算を遅延させることができます。結果として、呼び出し側はオブジェクトに対するアクセスをシリアル化する必要があります。Although many of these objects are logically immutable, their implementations could delay computation of some results to improve performance, and as a result, callers must serialize access to them.

複数のスレッドで Regex オブジェクトを共有する必要がある場合、同期されたメソッドを呼び出すことで、それらのオブジェクトはスレッドセーフ インスタンスに変換できます。If there is a need to share Regex result objects on multiple threads, these objects can be converted to thread-safe instances by calling their synchronized methods. 列挙子の例外はありますが、すべての正規表現クラスはスレッド セーフです。または、同期されたメソッドでスレッドセーフ オブジェクトに変換することができます。With the exception of enumerators, all regular expression classes are thread safe or can be converted into thread-safe objects by a synchronized method.

列挙子は唯一の例外です。Enumerators are the only exception. アプリケーションはコレクション列挙子に対する呼び出しをシリアル化する必要があります。An application must serialize calls to collection enumerators. 複数のスレッドでコレクションを同時に列挙できる場合、列挙子によってスキャンされるコレクションのルート オブジェクト上の列挙子メソッドを同期する必要があります。The rule is that if a collection can be enumerated on more than one thread simultaneously, you should synchronize enumerator methods on the root object of the collection traversed by the enumerator.

関連項目See also