【发布时间】:2017-02-01 05:35:10
【问题描述】:
我是否需要在字典的以下简单 getter 和 setter 中有一些线程安全机制?
如果需要,请提供 lock 和 ConcurrentDictionary 的示例。
public virtual void Add(IFoo foo)
{
dictionary.Add(foo.name, foo);
}
public virtual IFoo Get(string name)
{
if (!dictionary.TryGetValue(name, out IFoo foo)) return null;
return foo;
}
public virtual bool Has(string name)
{
return dictionary.TryGetValue(name, out IFoo foo);
}
public virtual IFoo Remove(string name)
{
if (dictionary.TryGetValue(name, out IFoo foo))
{
dictionary.Remove(name);
}
return foo;
}
protected readonly IDictionary<string, IFoo> dictionary = new Dictionary<string, IFoo>();
【问题讨论】:
-
为什么你不能用lock和ConcurrentDictionary编写你自己的例子。本网站不是代码编写服务,您需要自己付出一些努力,我们可以向您展示您犯了哪些错误。
-
我的第一个问题是,在上述情况下真的需要线程安全吗?请给我一些指导,然后我会编辑
-
这段代码是如何使用的?向我们展示您使用的实际多线程代码。
-
它是一个库,具有添加、删除和功能的单元测试,我不确定它会如何使用,但它需要线程安全吗?想象它是一个服务器端应用程序,数百万个连接将同时连接到服务器,应用程序将使用这个库来管理所有用户通用的键值对。一本字典供所有用户使用,
-
如果我将其转换为 ConcurrentDictionary,我的方法添加、获取、删除等对于服务器端的所有用户仍然是线程安全的,该字典将成为所有客户端用户的共享资源
标签: c# multithreading concurrency