C#:複数のスレッドがそれだけを読み取る場合、ArrayListを同期させる必要がありますか
-
10-07-2019 - |
質問
クラスで静的ArrayListを使用して、更新できないデータベースフィールドに関する情報を格納しています。コンストラクターで一度初期化する予定です(コンストラクターのロックで保護された初期化メソッド呼び出し)。その後、複数のスレッドがarraylistにフィールドが含まれているかどうかを確認します。この読み取りアクセスを何らかの方法で制御する必要がありますか?たとえば、ArrayList.Synchronizedを呼び出します。
解決
いいえ(およびstatic
コンストラクターで行う限り、暗黙的なマルチスレッドロックがあります。それができない場合は、ロックすることをお勧めします)。ただし、R / Wアクセスが必要になった場合にアクセスの制御に使用できる場合は、ReaderWriterLockSlimがあります。
他のヒント
いいえ。同期は、状態を変更するステートフルオブジェクトにのみ必要です。
いいえ、あなたが読んでいる限り、ただそれを手に入れることができます。
いいえ。ただし、 ReadOnlyCollection
スレッドがそれを変更できないことを確認します。
編集:ただし、これを行うには、リストをList<T>
ではなくArrayList
にする必要があります。
リストの最初の作成では、静的コンストラクターの使用を検討できます。これは、型への最初の参照で1回だけ呼び出されます。
所属していません StackOverflow