我拥有的集合对象是一个单例类型,它包含一个特定对象的列表,列表中的每个索引都被多个线程读取,这样它们就可以查询一个整数属性值,供线程局部变量使用。在我的观点中,这种情况是否需要使用同步的任何安全性,但是发布问题需要加倍确定。
上面提到的对象在多个线程上没有更新,它们只是在阅读。在我看来,甚至不需要在这里使用ReaderWriterLockSlim,因为没有写入。请确认我的理解。
代码类似于:
这里NumOfLocs,threadProp特定于一个线程和集合计数,并且对象不会改变,而线程正在读取,它们只是在初始化期间的开头修复
int NumOfLocs = collectionObject.LocCollection.Count;
int threadProp = collectionObject.LocCollection[index].Prop
答案 0 :(得分:1)
如果您只是阅读该集合,则不需要同步。但是,如果您想更新集合,可以使用System.Collections.Concurrent中提供的Thread安全集合类列表。 See here用于MSDN文档。
答案 1 :(得分:1)
通常用于读取状态的函数不会更改状态。但有时某些对象的某些功能会改变某些内部对象的状态,这与常识相反。例如,如果对象缓存某些内容或重新排列内部结构,则会发生这种情况。在不知道对象的内部工作原理的情况下,无法预先知道某个对象在其任何函数中的作用。
如果它是标准的.NET对象,则可能有一个文档可以告诉您该对象是否可以读取线程。如果它是某些第三方对象,那么你必须要求第三方。如果您对对象进行编码,那么只有您知道。