首页 > 编程语言 > 详细

线程问题——争用条件和死锁

时间:2015-12-23 22:37:10      阅读:274      评论:0      收藏:0      [点我收藏+]

1.创建一个工程,创建一个类命名为myThread ,里面放置一个方法,内容是num++,当num为5时,输出显示一个语句

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 
 7 namespace 线程问题__争用条件
 8 {
 9     class Mythread
10     {
11         public int number = 5;
12 
13         public void changeNum()
14         {
15             number++;
16             if (number == 5)
17             {
18                 Console.WriteLine("number这个值为5");
19             }
20             number = 5;
21         }
22     }
23 }

2.在包含有main方法的类中,输入以下代码

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading;
 6 using System.Threading.Tasks;
 7 
 8 namespace 线程问题__争用条件
 9 {
10     class Program
11     {
12         private static void changeNum(object o)
13         {
14             Mythread a=o as Mythread;
15             while (true)
16             { //循环调用Mythread类里面的changeNum方法
17                 a.changeNum();
18             }
19         }
20 
21 
22         static void Main(string[] args)
23         {
24             Mythread m=new Mythread();//创建一个新的mythread类
25             Thread t = new Thread(changeNum);//并用thread创建一个线程,调用上面的changeNum方法
26             t.Start(m);//开始调用这个t线程
27             Thread s=new Thread(changeNum);//创建一个新的线程s
28             s.Start(m);//并开始调用
29             Console.ReadKey();
30         }
31     }
32 }

运行结果如图,它会一直调用myThread类中的那个changeNum方法,因为有两个线程,如果一个在调用的时候number为6,可能另外一个number可能为5,这时候就会调用changeNum方法中console.writeLine("number这个值为5")这个语句,所以为避免这个情况,运用锁是一个很好的方法

技术分享

4.这个时候重新改写changeNum这个方法,加一个lock()判断即可

 1  private static void changeNum(object o)
 2         {
 3             Mythread a=o as Mythread;
 4             while (true)
 5             { //循环调用Mythread类里面的changeNum方法
 6                 lock (a)//申请一个锁,如果a对象被锁定了,下面语句会暂停,其他线程会在外面等待避免冲突
 7                   {
 8                      a.changeNum(); 
 9                   }
10                      
11             }
12         }

 

线程问题——争用条件和死锁

原文:http://www.cnblogs.com/pnzpb/p/5071417.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!