|
|
1
23
是的,你应该。基本上我会同步 任何 操作,如果列表可能同时用于写入。 通常,我发现集合分为两类:一类是创建、初始化然后再也不会更改的集合(线程安全的),另一类是随时间变化的集合(不是线程安全的,锁定所有访问)。 |
|
|
2
4
如果使用Reflector在代码处进行检查,会得到如下结果:
如您所见,它是对项目的简单迭代,这绝对是一个“读取”操作。如果您只将它用于读取(没有任何东西会改变项目),那么就不需要锁定它。如果您开始在一个单独的线程中修改列表,那么您肯定需要同步访问。 |
|
|
3
2
是的,你一定要担心! list.contains只获取一个equalitycomparer,然后循环遍历列表中包含的所有项,将作为参数传递的项与当前迭代索引处的项进行比较,因此如果在迭代过程中修改了列表,则结果可能是不可预测的。 |
|
4
2
|
|
|
6
1
假设这不是线程安全操作是安全的。这个 MSDN description 总结一下:
因此,读取操作之后是一个比较操作。 |
|
|
7
1
在多线程环境中,您需要确保不会同时向集合中写入内容。这是来自Reflector的代码,集合本身没有为您提供任何锁,所以它在您的意愿上。
|
|
|
8
0
如果编写器可能同时在编写,则list.contains绝对不是线程安全的。你需要用锁包装它和其他读写操作。 |
|
|
9
0
它被认为是一个读取操作。你不会遇到任何比赛条件,但是如果你想得到最新的,你可以
|
|
|
10
0
这个 ReaderWriterLock 类似乎是为您要查找的同步而构建的。 |
|
|
BenjiFB · C#内存缓存:在一次操作中追加到列表? 1 年前 |
|
SpeakX · 多线程上下文中的弱指针未过期时更新 2 年前 |
|
USMC6072 · 在父事件处理程序中调用异步方法会引发错误 3 年前 |
|
|
Eric · fgets_unlocked()用于多线程读取不同文件 4 年前 |