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);
}
}