c# - List <T>多写程序线程安全

标签 c# multithreading .net-2.0

如果我有多个线程调用List对象的Add方法,并且没有读者,那么我是否只需要在调用Add之前锁定List对象就可以保证线程安全?

最佳答案

通常,最好锁定一个单独的(不可变的)对象...锁定要修改的同一对象是不好的做法应该谨慎

private readonly object sync = new object();
private List<object> list = new List<object>();

void MultiThreadedMethod(object val)
{
    lock(sync)
    {
        list.Add(val);
    }
}

在这样的基本情况下,您将不会有问题,但是如果有可能更改列表(不是列表的内容,而是列表本身),那么您可能会遇到以下情况:锁定两个当您只打算锁定一个对象时。

关于c# - List <T>多写程序线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3200953/

相关文章:

c# - MSBuild - 将来自 editorconfig 的警告视为错误(在构建期间强制执行)

c++ - 从 void 方法启动线程

c# - 如何模拟 DirectoryInfo 类?

.net - Visual Studio 2012 .NET Framework 2.0 缺失

c# - 以编程方式将 View 呈现为字符串

c# - DateTime 可以为空吗?

c# - 在 C# 中从线程更新 UI 的其他方法

android - android启动服务时,ui线程是否需要去等待才能启动?

c# - 我是否应该在实现INotifyPropertyChanged的大量对象上遇到性能问题?

c# - 测试用例按顺序而不是并行运行