多线程同时计算同一个项目时,不会累计
如 int i=0,
2个线程同时计算加1 则i=1,
如果不是同时计算加1 则i=2
线程加锁--可以解决累计不对
以下是核心代码
private void button1_Click(object sender, EventArgs e)
{
List<IAsyncResult> listAction = new List<IAsyncResult>();
for (int i = 0; i < 20; i++)
{
//创建线程 总共20个线程
listAction.Add(new Action(() =>
{
Calculation();
}).BeginInvoke(null, null));
}
//等所有线程都结束
while (listAction.Count(r => !r.IsCompleted) > 0)
{
Thread.Sleep(100);
}
Console.WriteLine("加锁---计算结果为:{0}", count);
}
public static int count1 = 0;
public static int count = 0;
public static object o = new object();
private static void Calculation()
{
lock (o)//加锁
{
for (int j = 0; j < 10000000; j++)
{
count = count + 1;
}
}
}
计算结果如下 没有锁的要比实际累计要少,因为没加锁时可能会有两个线程同时计算