发布
社区首页 >问答首页 >List<T>(List<T>)构造函数线程安全吗?

List<T>(List<T>)构造函数线程安全吗?
EN

Stack Overflow用户
提问于 2014-09-05 07:40:00
回答 2查看 144关注 0票数 0

当我有了这个密码:

代码语言:javascript
代码运行次数:0
复制
public static List<Module> ExtensionList
{
    get
    {
        return new List<Module>(Extensions);
    }
}

线程安全吗?例如:它是否在复制列表时对Extensions发出锁?或者我应该明确地这样做:

代码语言:javascript
代码运行次数:0
复制
public static List<Module> ExtensionList
{
    get
    {
        lock (Extensions)
        {
            return new List<Module>(Extensions);
        }
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-05 07:42:18

不是的。MSDN清楚地指出,没有一种List<T>方法是线程安全的:

不保证任何实例成员都是线程安全的。 在一个列表上执行多个读取操作是安全的,但是如果在读取集合时修改了集合,则可能会出现问题。

构造函数本身始终是线程安全的:还不能从另一个实例调用它。

如果像在代码中一样,为List<T>构造函数提供另一个List<T>,这是不安全的,因为传入的List<T>在构造函数处理时可能会发生变化(然后应用上述规则)。

票数 4
EN

Stack Overflow用户

发布于 2014-09-05 07:46:54

即使在lock语句中设置构造函数,列表的使用也不会是线程安全。

使用线程安全集合(如BlockingCollection )。

http://msdn.microsoft.com/en-us/library/dd997305(v=vs.110).aspx

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25680866

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档