gpt4 book ai didi

c# - 这个锁使用线程安全吗?

转载 作者:太空狗 更新时间:2023-10-29 22:05:19 25 4
gpt4 key购买 nike

我知道使用 lock(this) 或任何共享对象是错误的。

不知这样的用法可以吗?

public class A
{
private readonly object locker = new object();
private List<int> myList;
public A()
{
myList = new List<int>()
}

private void MethodeA()
{
lock(locker)
{
myList.Add(10);
}
}

public void MethodeB()
{
CallToMethodInOtherClass(myList);
}
}

public class OtherClass
{
private readonly object locker = new object();
public CallToMethodInOtherClass(List<int> list)
{
lock(locker)
{
int i = list.Count;
}
}
}

这个线程安全吗?在 OtherClass 中,我们用一个私有(private)对象锁定,所以如果 class A 锁定了它的私有(private)锁,列表仍然可以在 OtherClass 的锁 block 中改变>?

最佳答案

不,它不是线程安全的。 Add 和 Count 可以在“同一”时间执行。您有两个不同的锁对象。

传递列表时始终锁定自己的锁对象:

  public void MethodeB()
{
lock(locker)
{
CallToMethodInOtherClass(myList);
}
}

关于c# - 这个锁使用线程安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8924500/

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