C#静态变量和静态⽅法的线程安全问题
数据库连接池⼀定会遇到线程安全问题,连接池可能会被多个线程同时访问,我在写连接池时,连接池是单例模式,参数和⽅法都是静态的,在测试过程中发现静态⽅法也会存在线程安全问题,然后通过查阅资料,得到了⼀些结果:
静态⽅法内部创建的参数是线程安全的,不同线程调⽤同⼀个静态⽅法时,他们不会共享静态⽅法内部创建的参数,代码举例如下
public static void Test()
{
int i = 0;
Console.WriteLine(i);
i++;
}
上⾯代码中,变量i在不同线程间是不会共享的,不同线程分别调⽤该⽅法,输出都是1,。
静态变量在不同线程间是共享的,这个相信⼤家都知道,⽽当静态⽅法中对静态变量进⾏操作时,这就涉及到了线程安全问题:
private static int i = 0;
public static void Test()
{
Console.WriteLine(i);
writeline输出数值变量i++;
}
这段代码在由不同线程进⾏操作时,存在线程安全问题,所以应该加锁
private static int i = 0;
public static void Test()
{
lock(this)
{
Console.WriteLine(i);
i++;
}
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论