5

私は、静的コンストラクターが複数回呼び出される可能性があるため、静的コンストラクターが競合状態に陥る可能性があると述べている友人と議論していました。これは、大量のマルチスレッド環境でのみ発生する可能性があるようです。それは可能ですか?

彼が間違っていることを証明する文書を見つけることができませんでした。誰かがこれについて何か洞察を持っていますか?

ありがとう!

4

2 に答える 2

13

それは可能ですか?

いいえ。CLR がこれを処理し、静的コンストラクターが複数回呼び出されるのを防ぎます。

これは、C# 言語仕様で何度も説明されています。たとえば、セクション 3.1 には次のように記載されています。

型の静的コンストラクターは、アプリケーション ドメインごとに最大 1 回実行されます。

于 2012-04-10T21:35:18.527 に答える
4

静的コンストラクターは、AppDomain ごとに 1 回だけ呼び出されます。
ECMA-335 では、CLI は次のことを保証する必要があると述べています。

「型初期化子は、ユーザー コードによって明示的に呼び出されない限り、特定の型に対して 1 回だけ実行されます。」

そして、C# で型初期化子を呼び出す便利な方法を聞いたことがありません。

Type イニシャライザ間に循環依存関係を作成する場合にのみ、問題が発生する可能性があります。
この問題に関する興味深い記事については、こちらを参照してください:
https://msmvps.com/blogs/jon_skeet/archive/2012/04/07/type-in​​itializer-circular-dependencies.aspx )

于 2012-04-10T21:37:21.867 に答える