gpt4 book ai didi

c# - 静态函数并发 ASP.NET

转载 作者:太空狗 更新时间:2023-10-29 20:51:06 24 4
gpt4 key购买 nike

如果您有两个线程同时调用静态函数,是否存在并发风险?如果该函数使用类的静态成员,是否会出现更大的问题?

  • 这两个调用是否相互分开? (函数就像是为两个线程复制的?)
  • 他们是否自动排队?

例如在下一个例子中,是否存在风险?

private static int a = 5;

public static int Sum()
{
int b = 4;
a = 9;
int c = a + b;
return c;
}

下一个例子,有风险吗?

public static int Sum2()
{
int a = 5;
int b = 4;
int c = a + b;
return c;
}

更新:事实上,如果两个函数都在同一个类中,那么风险是什么?

谢谢,列文·卡登

最佳答案

是的,在静态方法中修改静态变量时存在并发风险。

静态函数本身有不同的局部变量集,但任何静态变量都是共享的。

在您的特定示例中,您没有被暴露,但这只是因为您使用的是常量(并为它们分配相同的值)。稍微更改代码示例,您就会暴露出来。

编辑:

如果您从不同的线程调用 both Sum1() 和 Sum2() 就会遇到麻烦,无法保证此语句中 a 和 b 的值:int c = a + b;

private static int a = 5;

public static int Sum1()
{
int b = 4;
a = 9;
int c = a + b;
return c;
}

public static int Sum2()
{
int b = 4;
int c = a + b;
return c;
}

您还可以通过多次调用单个方法来解决并发问题,如下所示:

public static int Sum3(int currentA)
{
a = currentA;
int b = 4;
int c = a + b;
int d = a * b; // a may have changed here
return c + d;
}

这里的问题是 a 的值可能会由于其他调用改变它而在方法中改变。

关于c# - 静态函数并发 ASP.NET,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/680546/

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