C#方法同步

当我们多线程执行同一个方法时,如果没有公共使用数据时,没啥问题?但是需要访问同一个对象时,如果没有锁的话,会出现数据丢失的可能!

例如下面的例子:没有锁时,集合长度可能不满足设定值

 using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Runtime.CompilerServices;
 using System.Text;
 using System.Threading.Tasks;

 class Program
 {
     static void Main(string[] args)
     {
         List<DateTime> listDate = new List<DateTime>();
         Parallel.For(0, 100000, a =>
           {
               Add(listDate);
           });
         Console.WriteLine(listDate.Count);
     }


     public static void Add(List<DateTime> listDate)
     {
         listDate.Add(DateTime.Now);
     }

 }

我们可以给Add方法加个锁,也可以给该方法提供一个特性,标记该方法是同步的。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;

class Program
{
    static void Main(string[] args)
    {
        List<DateTime> listDate = new List<DateTime>();
        Parallel.For(0, 100000, a =>
          {
              Add(listDate);
          });
        Console.WriteLine(listDate.Count);
    }


    [MethodImpl(MethodImplOptions.Synchronized)]
    public static void Add(List<DateTime> listDate)
    {
        listDate.Add(DateTime.Now);
    }

}

posted @ 2022-04-12 22:45  Bridgebug  阅读(84)  评论(0编辑  收藏  举报