- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
SynchronizedCollection<T>.Remove()
的 MSDN 文档( https://msdn.microsoft.com/en-us/library/ms619895(v=vs.110).aspx ) 声明此函数返回
true if item was successfully removed from the collection; otherwise, false.
除了项目不在列表中,还有什么情况会返回false?
例如,如果集合被锁定,它会返回false
吗?还是会等到解锁后才移除元素?
最佳答案
如果它可以获取锁,然后如果该项目存在于集合中,它将返回 true。否则它将返回 false。
有可能您调用了 Remove() 但其他线程正在处理该集合,您无法获得锁。另一个线程可能会在您获得锁定之前删除该项目。锁定后,项目已被删除,因此它将返回 false
.
在下面的代码中,当您调用 Remove
时很清楚它尝试获取锁,如果不成功,它将等待直到它可用。一旦可用,它将检查该项目是否仍然存在。如果不是,则返回 false
.如果是,它将调用 RemoveAt
.
这是支持我上面所说的 SynchronizedCollection<T>
的代码类的源代码:
public bool Remove(T item) {
lock( this.sync ) {
int index = this.InternalIndexOf( item );
if( index < 0 )
return false;
this.RemoveItem( index );
return true;
}
}
protected virtual void RemoveItem(int index) {
this.items.RemoveAt( index );
}
关于c# - 在什么情况下 SynchronizedCollection<T>.Remove() 会返回 false?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41232632/
为什么 Sun 不使用 synchronized(this) 而不是 mutex = this 然后使用 synchronized(mutex) ? 我看不出他们所做的有什么好处吗?我错过了什么吗?
如何SynchronizedCollection和 System.Collections.Concurrent 中的并发集合命名空间彼此不同,除了 Concurrent Collections 是一个
有一个内部类 SynchronizedCollection - 在 java.util.Collections 里面有两个构造函数。第一个获取集合,另一个获取集合和互斥锁。前构造函数检查参数是否为空。
我在 Java 中使用 Collections.synchronizedCollection 来保护一个集合,我知道这个集合正在被许多线程同时访问。 Java API 警告: "用户在遍历返回的集合时
我指的是问题 here并使用作者代码示例,现在我的问题是 为什么作者使用synchronized(synchronizedMap),真的有必要吗,因为synchronizedMap总是确保没有两个线程
我试图在我的 C# 代码中包含以下行,但由于某种原因它被标记为错误: public SynchronizedCollection allImages = new Synchronize
SynchronizedCollection.Remove() 的 MSDN 文档( https://msdn.microsoft.com/en-us/library/ms619895(v=vs.11
我想知道是否有人知道为什么 SynchronizedCollection 类是在 ServiceModel 程序集中实现的。我看不到程序集名称和这个(相对)通用类之间的任何联系。 最佳答案 这个类非常
作为我上一篇文章的后续 Is iteration via Collections.synchronizedSet(...).forEach() guaranteed to be thread safe
我们可以对所有 Collections 类型的对象(如 Set 和 List)使用 Collections.synchronizedCollection(Collection c),这就是为什么我们有
.NET 4.0 引入了 System.Collections.Concurrent命名空间: "The System.Collections.Concurrent namespace provide
我是一名优秀的程序员,十分优秀!