C#:如果多个线程只读取它,我是否必须使ArrayList同步
-
10-07-2019 - |
题
我在类中使用静态ArrayList来存储有关不可更新数据库字段的信息。我计划在构造函数中初始化它一次(init方法调用由构造函数中的lock保护)。之后,多个线程检查arraylist是否包含字段。我是否必须以任何方式控制此读取权限?例如,通过调用ArrayList.Synchronized。
解决方案
否(只要你在static
构造函数中创建它,你就不需要创建它,具有隐式多线程锁定 - 如果你无法做到这一点,你可能会想要锁定)。如果您最终需要进行R / W访问,则可以使用ReaderWriterLockSlim来控制访问。
其他提示
没有。只有在您要更改状态的有状态对象时才需要同步。
不,只要你正在阅读,你就可以拥有它。
不,但请考虑将其包装在 ReadOnlyCollection
中确保没有任何线程可以修改它。
编辑:但是,要执行此操作,您需要将列表设为List<T>
而不是ArrayList
。
对于List的初始创建,您可以考虑使用静态构造函数。这只会在第一次引用类型时调用一次。
不隶属于 StackOverflow