gpt4 book ai didi

c# - 返回 IEnumerable<> 线程安全吗?

转载 作者:IT王子 更新时间:2023-10-29 04:28:43 25 4
gpt4 key购买 nike

我有一个 Visual Studio 2008 C# .NET 3.5 项目,我希望其中有一个 Foo 的线程安全池对象。

public class FooPool
{
private object pool_lock_ = new object();
private Dictionary<int, Foo> foo_pool_ = new Dictionary<int, Foo>();

// ...

public void Add(Foo f)
{
lock (pool_lock_)
{
foo_pool_.Add(SomeFooDescriminator, f);
}
}

public Foo this[string key]
{
get { return foo_pool_[key]; }
set { lock (pool_lock_) { foo_pool_[key] = value; } }
}

public IEnumerable<Foo> Foos
{
get
{
lock (pool_lock_)
{
// is this thread-safe?
return foo_pool_.Select(x => x.Value);
}
}
}
}

public IEnumerable<Foo> Foos { get; }函数线程安全?或者,我是否需要克隆结果并返回一个新列表?

最佳答案

不,不是。

如果另一个线程在您的调用者枚举字典时向字典添加内容,您将收到错误消息。

相反,您可以:

lock (pool_lock_) {
return foo_pool.Values.ToList();
}

关于c# - 返回 IEnumerable<> 线程安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10232631/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com