除了Concurrent Collections是命名空间还是一个类之外,命名空间中SynchronizedCollection<T>的并发集合如何System.Collections.Concurrent相互不同SynchronizedCollection<T>?
SynchronizedCollection<T>并发集合中的所有类都提供了线程安全的集合.我如何决定何时使用其中一个,为什么?
c# collections .net-4.0 thread-safety concurrent-collections
我对C#很新,所以请耐心等待.我对线程安全感有点困惑.什么时候线程安全什么东西什么时候不安全?
正在阅读从现场总是线程安全的(刚刚从一些被初始化之前读)?
//EXAMPLE
RSACryptoServiceProvider rsa = new RSACrytoServiceProvider();
rsa.FromXmlString(xmlString);
//Is this thread safe if xml String is predifined
//and this code can be called from multiple threads?
Run Code Online (Sandbox Code Playgroud)
被访问的数组或列表的对象始终是线程安全的(如果你使用一个for循环枚举)?
//EXAMPLE (a is local to thread, array and list are global)
int a = 0;
for(int i=0; i<10; i++)
{
a += array[i];
a -= list.ElementAt(i);
}
Run Code Online (Sandbox Code Playgroud)
被列举始终/曾经线程安全的?
//EXAMPLE
foreach(Object o in list)
{
//do something with o
}
Run Code Online (Sandbox Code Playgroud)
可以写入和读出一个特定的领域不断导致损坏的读取(场的一半被改变,一半仍是不变的)?
感谢您的所有答案和时间.
编辑:我的意思是如果所有线程只读取和使用(不写或更改)对象.(除了最后一个问题,显然我的意思是线程既读又写).因为我不知道普通访问或枚举是否是线程安全的.
MSDN "线程安全集合.NET Framework 4"声明:
"一些并发集合类型使用轻量级同步机制,如SpinLock,SpinWait, SemaphoreSlim和CountdownEvent,它们是.NET Framework 4中的新增功能"
虽然MSDN网站告诉SpinWaitwas可用于.NET 1.1,而另一篇MSDN文章从.NET 4.0启动SpinWaitwas
好吧,好奇心来自Lee Grissom的评论,以回答SynchronizedCollection与其他并发集合之间的区别是什么?:
"@Matt,.NET4并发类使用
SpinWait对象来解决线程安全而不是Monitor.Enter/Exit(又称Critical部分)?"
以及第一个NSDN引用说明这SpinWait是.NET 4.0的新功能
那么,它是新的还是不是?
如果新的那么如何?
c# ×3
.net ×1
.net-4.0 ×1
arrays ×1
collections ×1
concurrency ×1
enumeration ×1
spinwait ×1
string ×1