1
7
你知道内置的吗
它使用标准
|
2
3
这里有几个线程问题。 1。 我认为getEnumerator函数在这里暴露了一个线程问题。它们提供了对不受锁控制的内车厢的引用。 例如,如果有一个线程在列表上执行foreach,而另一个线程正在删除或插入元素,那么它可能会崩溃。 解决方案是复制列表并返回新克隆列表上的枚举器。如果列表很长,那么回调将是内存问题。 2。 contains()和indexof()函数或多或少是无用的,除非在同步列表之外有其他锁定方法。 示例:线程A获取对象的索引,线程B插入/删除/更新该对象,线程A索引现在已过时。 我不认为这真的是一个伟大的想法与完全同步的名单。编写一个定制的版本,而不是功能有限的版本。 如果您只需要一个队列或堆栈,那么只需要两个或三个完全同步的必要方法来实现这个队列或堆栈。如果您需要更多的功能,请使用一个列表,让不同的线程进行同步。 |
3
2
这个类解决了所有问题,使您的列表100%线程安全。 使用与数据库中的事务类似的作用域可以避免竞争条件。 客户端代码
类代码
|
4
1
您的实现还可以,但您仍然需要关注同步问题: 给出一个列表“foo”
现在,如果另一个线程在这两行之间执行list.clear()呢? 您的读写器锁应该可以公开访问以处理这些情况。 当然,对于枚举器也是如此…… |
5
0
我想你应该看看 操作 那个 您的应用程序需要 然后设计一个以线程安全方式公开它们的类。(列一个太低的等级) 您的设计在现实生活中不太可能是线程安全的,因为调用列表的代码可能以不安全的方式组合操作。
|
6
0
对于其他操作,列表中的某些操作不能是有意义的线程安全操作。例如,一个线程将要写入元素5,而另一个线程将删除元素3,以便将原来的元素5移动到4,将原来的元素6移动到5,第一个线程将最终覆盖一个不是它所期望的元素。
如果对其行为进行某些限制,并让它实现一个相同的
我能想到的最有用的线程安全列表样式将支持以下操作,除了那些可以在实现的数组上使用的操作之外
列表将支持添加项,但不支持插入或删除项。自从
这种类型不应该建立在
一个只附加的列表可能是一个有用的线程安全类型,但是我还不知道.NET的任何版本中有任何这样的类型。 |
Robert King · Unity C#语法问题-转换位置 1 年前 |
JBryanB · 如何从基本抽象类访问类属性 1 年前 |
law · 检查答案按钮的输入字符串格式不正确 2 年前 |
i_sniff_ket · 在unity之外使用unity类 2 年前 |