gpt4 book ai didi

c# - 我需要锁吗?

转载 作者:太空狗 更新时间:2023-10-29 22:03:42 26 4
gpt4 key购买 nike

如果要确保实例仅创建1次,是否需要在此处添加锁块?

        if (instance==null)
{
instance = new Class();
}

由于在IF中只有1条指令,因此我不确定100%。在类似下面的情况下,我确定会需要它,但我想再次检查一下是否同样适用于上面的代码。
        if (instance==null)
{
int i = 5;
int y = 78;
instance = new Class(i, y);
}

编辑

是的,我认为是多线程的

最佳答案

是的,您需要在两个示例中都加锁。让我们对行进行编号以使说明更容易:

1 if (instance == null)
2 {
3 instance = new Class();
4 }

现在,假设您有两个线程A和B。两个线程都在执行此代码。首先,A在第1行测试 instance,由于它为null,所以它采用真实路径-进入第3行。然后,在执行第3行之前获得上下文切换,而B执行相同的操作(在第1行为true,最后在第3行)第3行)。现在,这两个线程都在 if语句主体内,并且您将获得两个 instance赋值。

关于c# - 我需要锁吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7407889/

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