多线程同时计算同一个项目时,不会累计
如 int i=0,
2个线程同时计算加1 则i=1,
如果不是同时计算加1 则i=2
线程加锁--可以解决累计不对
以下是核心代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | 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; } } } |
