gpt4 book ai didi

.net - 如果不触及底层集合,ReadOnlyCollection 是线程安全的吗?

转载 作者:行者123 更新时间:2023-12-03 14:07:07 25 4
gpt4 key购买 nike

MSDN含糊地提到:

A ReadOnlyCollection<(Of <(T>)>) can support multiple readers concurrently, as long as the collection is not modified. Even so, enumerating through a collection is intrinsically not a thread-safe procedure. To guarantee thread safety during enumeration, you can lock the collection during the entire enumeration. To allow the collection to be accessed by multiple threads for reading and writing, you must implement your own synchronization.



以下公共(public)静态集合对于多个线程迭代是否安全?如果没有,.NET 中是否有一些安全的东西?我应该放弃 ReadOnlyCollection并为 SomeStrings 属性 getter 的每次访问创建一个私有(private)集合的新副本?我知道如果多个线程试图锁定公共(public)集合,可能会出现死锁问题,但这是一个内部库,我不明白我们为什么想要这样做。
public static class WellKnownStrings {

public static readonly ICollection<string> SomeStrings;

static WellKnownStrings()
{
Collection<string> someStrings = new Collection<string>();
someStrings.Add("string1");
someStrings.Add("string2");
SomeStrings = new ReadOnlyCollection<string>(someStrings);
}
}

最佳答案

通常,从不改变其内部状态(一旦发布给外部调用者)的不可变对象(immutable对象)可以被视为线程安全的。

一个 ReadOnlyCollection<T>然而,它本身并不是线程安全的,因为它只是一个现有集合的包装器,它的所有者可以随时修改它。

不过,OP 中的示例是线程安全的,因为无法修改底层集合(至少在没有黑客攻击的情况下不能修改)。

关于.net - 如果不触及底层集合,ReadOnlyCollection 是线程安全的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1758492/

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