2009-04-07 3 views
0

C#では、クラスフィールドはすべてのスレッドがそのオブジェクトの独自のインスタンスを持つことを意味します。インスタンスフィールドとスレッド起点の安全性に関する質問

など。スレッド1は、オブジェクトbのように、オブジェクトaのそれ自身のインスタンスを有する。

異なるPC上のWebアプリケーションのユーザー2人は、異なるスレッドのインスタンスフィールド(コレクションを言う)にアクセスする必要がありますか?

これは私に質問をさせてくれます。コレクションを同期するコードを書く必要があるのはなぜですか?コレクションがインスタンスベースであり、共有状態でない場合

私は、その状態を変更すると、別のスレッドがコレクションを読み込もうとしているだけであるということだけがあります。私は実際に書いたコードを通してこれが可能なケースに過ぎないので "それはありますか?"例えば。 1つのスレッドを生成して同期されていないコレクションを読み込み、元のスレッドを使用してコレクションに書き込みます。それとも、他につかまえがありますか?

これは基本的な質問のように私はこれを初心者セクションに入れました。

感謝のC#で

答えて

2

は、デフォルトではクラスでは、各オブジェクトのそれ自身のインスタンスを持っていません。

クラスのインスタンスとスレッドは、([ThreadStatic]などのフラグが立てられている場合を除き)2つの別々の構造です。インスタンスを作成して別のスレッドを実行すると、別のスレッドがオブジェクトの独自のインスタンスを作成しない限り、同じインスタンスで動作します。

スレッドは通常、(データと状態を共有するために)同じインスタンスで動作するため、それらを適切に同期させる必要があります。

スレッドがオブジェクトの状態またはインスタンスを決して共有しない場合は、同期について心配する必要はありません。これは実際にはまれですが、通常、スレッドはある種の共有データを処理しています。生成された各スレッドが独自のオブジェクトを作成し、他のスレッドがそれらと通信していない場合は、同期を無視できます。

+0

私の理解に欠けていたもの。理論をありがとう! – dotnetdev

+0

問題はありません:)私はお手伝いできます。 –

関連する問題