C#:複数のスレッドがそれだけを読み取る場合、ArrayListを同期させる必要がありますか

StackOverflow https://stackoverflow.com/questions/1819968

質問

クラスで静的ArrayListを使用して、更新できないデータベースフィールドに関する情報を格納しています。コンストラクターで一度初期化する予定です(コンストラクターのロックで保護された初期化メソッド呼び出し)。その後、複数のスレッドがarraylistにフィールドが含まれているかどうかを確認します。この読み取りアクセスを何らかの方法で制御する必要がありますか?たとえば、ArrayList.Synchronizedを呼び出します。

役に立ちましたか?

解決

いいえ(およびstaticコンストラクターで行う限り、暗黙的なマルチスレッドロックがあります。それができない場合は、ロックすることをお勧めします)。ただし、R / Wアクセスが必要になった場合にアクセスの制御に使用できる場合は、ReaderWriterLockSlimがあります。

他のヒント

いいえ。同期は、状態を変更するステートフルオブジェクトにのみ必要です。

いいえ、あなたが読んでいる限り、ただそれを手に入れることができます。

いいえ。ただし、 ReadOnlyCollection スレッドがそれを変更できないことを確認します。

編集:ただし、これを行うには、リストをList<T>ではなくArrayListにする必要があります。

リストの最初の作成では、静的コンストラクターの使用を検討できます。これは、型への最初の参照で1回だけ呼び出されます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top