如果我有多个线程调用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/