gpt4 book ai didi

c# - 使类字段线程安全

转载 作者:行者123 更新时间:2023-11-30 20:41:39 24 4
gpt4 key购买 nike

假设我有一个由不同线程访问的值的 List。因此,我通过执行以下操作使其成为线程安全的:

private static object syncObject;
syncObject = new Object();

public List<double> MyList
{
get
{
lock(syncObject) { return myList;}
}
set
{
lock(syncObject) { myList = value;}
}
}

如果在我的一个函数中,我需要访问 ListCount 属性,它可能不再是线程安全的。那么我该如何编写,即使在访问属性时也是线程安全的?

最佳答案

正如 Willem van Rumpt 所说,您只是同步了对该特定属性的访问,而不是使其成为线程安全的。为了不重新发明轮子,您可以使用 System.Collections.Concurrent ( https://msdn.microsoft.com/en-us/library/dd267312(v=vs.110).aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-1 ) 中的集合

另一个更可行的选择是使用不可变列表。不幸的是,afaik .Net 在这里没有提供太多。我所知道的唯一实现是在 Microsoft.FSharp.Collections 中。此命名空间中的列表是一个不可变的单链表。 (虽然我还没有在 C# 中使用过它)。

更新:作为Matías Fidemraizer注意,System.Collections.Immutable nuget 包可用于 .net 4.5 及更高版本,其中包含多个不可变集合的实现。谢谢!

关于c# - 使类字段线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32197354/

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