|
|
1
7
你知道内置
它使用标准
|
|
|
2
3
这里有几个线程问题。 1. 我认为GetEnumerator函数在这里暴露了一个线程问题。它们提供了对不受锁控制的innerCache的引用。 它可能会崩溃的示例是,如果你有一个线程在列表上执行foreach,而另一个线程正在删除或插入元素。 解决方案是复制列表,并在新克隆的列表上返回一个枚举器。如果列表很长,就会出现内存问题。
我不认为这是一个完全同步的列表的好主意。编写一个功能有限的定制版本。
|
|
|
3
2
此类解决了所有问题,并使您的列表100%线程安全。
客户端代码
班级代码
|
|
|
4
1
您的实现还可以,但您仍然需要关心同步问题: 给定一个列表{“foo”}
现在,如果另一个线程做一个列表怎么办。在这两行之间清除()? 您的读写器锁应该是公开访问的,以处理这些情况。 |
|
|
5
0
我想你应该看看 您的应用程序需要
|
|
|
6
0
列表中的某些操作相对于其他操作来说,不能是有意义的线程安全的。例如,一个线程即将写入元素5,另一个线程删除元素3,使得曾经的元素5被移动到4,曾经的元素6被移动到5,第一个线程最终将覆盖一个与预期不同的元素。
该列表将支持添加项目,但不支持插入或删除项目。自从
这种类型不应该建立在
仅追加列表可能是一种有用的线程安全类型,但我还不知道在任何版本的.net中有任何此类类型。 |
|
|
user107586 · 如何处理等待句柄不会导致无限循环? 1 年前 |
|
|
ron burgundy · 获取-释放语义是否跨线程传递?[副本] 1 年前 |
|
|
BenjiFB · C#内存缓存:在一次操作中追加到列表? 1 年前 |
|
|
András Takács · Python多线程问题 1 年前 |
|
|
András Takács · Python多线程错误 1 年前 |