C#:如果多个线程只读取它,我是否必须使ArrayList同步

时间:2009-11-30 13:56:44

标签: c# multithreading arraylist synchronized

我在类中使用静态ArrayList来存储有关不可更新数据库字段的信息。我计划在构造函数中初始化它一次(init方法调用由构造函数中的lock保护)。之后,多个线程检查arraylist是否包含字段。我是否必须以任何方式控制此读取权限?例如,通过调用ArrayList.Synchronized。

5 个答案:

答案 0 :(得分:3)

不,只要你正在阅读,你就可以拥有它。

答案 1 :(得分:3)

没有。只有在您要更改状态的有状态对象时才需要同步。

答案 2 :(得分:2)

否(并且在创建它时不需要,只要你在static构造函数中执行它,which has an implicit multithread lock - 如果你无法做到这一点,你可能会想要锁定)。如果您最终需要进行R / W访问,则可以使用ReaderWriterLockSlim来控制访问。

答案 3 :(得分:1)

不,但考虑将其包装在ReadOnlyCollection中以确保没有任何线程可以修改它。

修改:但是,要执行此操作,您需要将列表设为List<T>而不是ArrayList

答案 4 :(得分:0)

对于List的初始创建,您可以考虑使用静态构造函数。这只会在第一次引用类型时调用一次。