![]() |
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 类似乎是为您要查找的同步而构建的。 |
|
Robert King · Unity C#语法问题-转换位置 1 年前 |
![]() |
JBryanB · 如何从基本抽象类访问类属性 1 年前 |
|
law · 检查答案按钮的输入字符串格式不正确 2 年前 |
![]() |
i_sniff_ket · 在unity之外使用unity类 2 年前 |