![]() |
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的任何版本中有任何这样的类型。 |
![]() |
A B · C#Excel自动调整列避免长文本时出错 4 月前 |
![]() |
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 4 月前 |
![]() |
Aycon · 在工厂方法中释放部分创建的对象的正确方法是什么? 4 月前 |
|
Sei · Avalonia/WPF将路由器传递到控制模板 5 月前 |