线程间协作还可通过lock(加锁)方式进行,lock属于C#的Monitor语法糖(Monitor后续讲解)。使用简单快捷,如下:
/// <summary> /// 多线程协作-lock快捷方式 /// 成功解决多线程对单一资源的共享 /// </summary> private static void MultiThreadSynergicWithLock() { int[] array = new int[3]; Thread producer = new Thread(() => { int count = 0; Random random = new Random(); while (true) { if (10 == count) break; lock (array) { array[0] = random.Next(10); array[1] = random.Next(10); array[2] = random.Next(10); count++; Console.WriteLine(String.Format("{0} work count:{1}。{2}-{3}-{4}", Thread.CurrentThread.Name, count, array[0], array[1], array[2])); } Thread.Sleep(100); } }) { Name = "producer" }; Thread customer = new Thread(() => { //Console.WriteLine(String.Format("{0} start work", Thread.CurrentThread.Name)); int count = 0; while (true) { if (10 == count) break; lock (array) { count++; Console.WriteLine(String.Format("{0} work count:{1}。{2}-{3}-{4}", Thread.CurrentThread.Name, count, array[0], array[1], array[2])); array[0] = 0; array[1] = 0; array[2] = 0; } Thread.Sleep(10); } }) { Name = "customer" }; producer.Start(); customer.Start(); }
说明:
1、通过lock成功解决了多个线程对同一资源的共享使用问题,确保一个线程在lock到资源后,另外需要资源的线程只能处于等待状态。
2、lock并不能解决线程间顺序执行的问题(线程顺序执行是指:要求线程A,B满足,A先执行,B再执行,A又执行,B再次执行这种交替模式)