此类型的所有公共静态(Visual Basic 中为 Shared)成员对多线程操作而言都是安全的。但不保证任何实例成员是线程安全的。

在MSDN上经常会看到这样一句话。表示如果程序中有n个线程调用这个方法,那么这n个线程都是安全的, 但是实例成员就不能保证了。

比如Math.Max方法,不管有多少个线程调用,都不会出现线程不安全的情况。

列举一个由于多线程引起的数据不安全。

static void Main(string[] args)
{
    Stopwatch watch = new Stopwatch();
    watch.Start();
    int sum = 0;
    var t1 = Task.Run(() =>
    {
        for (int i = 0; i < 3000000; i++)
        {
            sum += i;
        }
    });
    var t2 = Task.Run(() =>
    {
        for (int i = 3000000; i < 5000000; i++)
        {
            sum += i;
        }
    });

    Task.WaitAll(t1, t2);
    Console.WriteLine("和:"+ sum);
    Console.WriteLine("用时:"+watch.ElapsedMilliseconds);
}
View Code

相关文章:

  • 2021-11-19
  • 2021-09-26
  • 2021-10-22
  • 2021-12-05
  • 2022-12-23
  • 2021-10-04
  • 2021-07-19
猜你喜欢
  • 2021-06-01
  • 2022-02-21
  • 2022-12-23
  • 2022-01-07
  • 2022-12-23
  • 2021-08-11
相关资源
相似解决方案