【发布时间】:2017-05-03 21:37:01
【问题描述】:
想象一个 ConcurrentDictionary 存储 Foo 的集合。是否有必要担心 Foo 的 Bar 属性的线程安全(例如线程 1 在线程 2 设置值的同时获取 Bar 的值)?还是字典本身的并发性使属性线程安全?
//Bar with no lock
public class Foo
{
public string Bar { get; set; }
}
//Bar with lock
public class Foo
{
private readonly object barLocker = new object();
private string bar;
public string Bar
{
get
{
lock(barLocker)
{
return bar;
}
}
set
{
lock(barLocker)
{
bar = value;
}
}
}
}
【问题讨论】:
-
没有人可以评论未显示的代码的功能。
-
这是一个关于 ConcurrentDictionary 对象本身的问题,而不是任何具体的实现。
-
只是因为您使用的线程安全容器对容器中对象的线程安全没有任何影响。从容器中检索对象后,您就有了一个对象
-
不,您是在询问存储在字典中的对象,并询问使用它是否安全。在不知道对象、如何使用、如何使用字典以及所有其他相关上下文的情况下,没有人可以说这种用法是否合适。
-
没有提及具体用法,因为这是关于 ConcurrentDictionary 本身以及它是否为其包含的对象的属性提供线程安全性的一般问题。
标签: c# thread-safety concurrentdictionary