C# C语言中的并发词典#

C# C语言中的并发词典#,c#,concurrency,thread-safety,concurrentdictionary,C#,Concurrency,Thread Safety,Concurrentdictionary,对于并发字典 ConcurrentDictionary<string, C> dic; concurrentdick; (其中C是某个类),是否有人知道应该如何对C实例(例如C0)执行操作的规则和限制的引用,该实例是字典中的一个值?也就是说,如果我们有一个线程直接对C0执行操作,另外两个线程通过字典对C0执行操作,我猜我们仍然可能会遇到争用情况?(如果C是原语,我们就不会这样做) 谢谢你的建议 最好的, ChrisConcurrentDictionary类本身是线程安全的 这与你

对于并发字典

ConcurrentDictionary<string, C> dic;
concurrentdick;
(其中C是某个类),是否有人知道应该如何对C实例(例如C0)执行操作的规则和限制的引用,该实例是字典中的一个值?也就是说,如果我们有一个线程直接对C0执行操作,另外两个线程通过字典对C0执行操作,我猜我们仍然可能会遇到争用情况?(如果C是原语,我们就不会这样做)

谢谢你的建议

最好的,
Chris

ConcurrentDictionary类本身是线程安全的

这与你放在字典里的任何东西的线程安全无关

您应该确保您的类是线程安全的,或者理想情况下是不可变的

如果您确实在字典中修改了对象,您还必须知道,不同的线程可能会随时删除或替换它

总之,线程安全性仍然很难实现;您仍然需要确切地知道可能发生的更改,并确保每个线程都可以处理它


有关编写线程安全对象的详细信息,请参见。

在类
C
@SLaks中使用同步原语,如
lock
,但这不会有帮助…
如果C是一个原语,我们不会这么做。您好,感谢您回复并确认问题是字典元素的线程安全。但既然是这样,I4V写“使用C中的锁这样的同步原语”不是很正确吗?我之所以说“如果C是原语,我们就不会这么做”,是因为如果不直接通过字典访问C,C是不可引用的(因此字典是线程安全的)。这不对吗Thanks@ChrisW:是的,但这仍然限制了并发的用途。@ChrisW:一点也不。如果您有一个仅由字典引用的可变引用类型,那么它仍然不是线程安全的。你想说的是不可变类型是线程安全的。最后一个问题——你说“[locks]限制了并发的目的。”——你是说“concurrency=threadsafe+fast”和锁不快吗?