线程死锁问题
来源:互联网 发布:阿里云到底是什么 编辑:程序博客网 时间:2024/05/16 07:06
- using System;
- using System.Threading;
- using System.Diagnostics;
- namespace ConsoleApplication1
- {
- class StateObject
- {
- private int state = 5;
- public void ChangeState(int loop)
- {
- if (state == 5)
- {
- state++;
- Trace.Assert(state == 6, "Race condition occurred after" + loop + " loops");
- }
- state = 5;
- }
- }
- class SampleThread
- {
- private StateObject s1;
- private StateObject s2;
- public SampleThread(StateObject s1, StateObject s2)
- {
- this.s1 = s1;
- this.s2 = s2;
- }
- /* 由于Deadlock1(),Deadlock2()中方法定义的锁定对象的顺序不同最终导致了死锁 */
- public void Deadlock1()
- {
- int i = 0;
- while (true)
- {
- lock (s1)
- {
- lock (s2)
- {
- s1.ChangeState(i);
- s2.ChangeState(i++);
- Console.WriteLine("运行," + i);
- }
- }
- }
- }
- public void Deadlock2()
- {
- int i = 0;
- while (true)
- {
- lock (s2)
- {
- lock (s1)
- {
- s1.ChangeState(i);
- s2.ChangeState(i++);
- Console.WriteLine("运行," + i);
- }
- }
- }
- }
- }
- class Program
- {
- static void Main(string[] args)
- {
- /* 死锁
- * 至少有两个线程被挂起,等待对方解除锁定
- * 线程将无限等待下去
- */
- StateObject state1 = new StateObject();
- StateObject state2 = new StateObject();
- //此程序中第一个线程如果先锁定s1,同时第二个线程先锁定s2
- //然后第一个线程在企图锁定s2时,发现s2已被锁定,于是开始等待s2解锁
- //同时第二个线程企图锁定s1时,发现s1已被锁定,于是开始等待s1解锁
- //但对于线程一来说如果s2不解锁,其也无法完成程序,对于线程二也是如此
- //于是无穷的互相等待解锁开始了,死锁开始啦!
- //避免死锁,可以从一开始定义好锁定的顺序,也可以为锁定定义超时时间^-^
- new Thread(new SampleThread(state1, state2).Deadlock1).Start();
- new Thread(new SampleThread(state1, state2).Deadlock2).Start();
- }
- }
- }
0 0
- 线程中的死锁问题
- 线程死锁问题
- 线程死锁问题
- 线程死锁问题
- java线程死锁问题
- 线程死锁问题
- 线程死锁问题
- 线程死锁的问题
- 线程-模拟死锁问题
- java线程死锁问题
- 线程死锁问题
- 线程死锁问题
- 线程死锁问题
- 线程死锁问题
- 线程死锁问题
- 线程中死锁的问题
- 关于线程死锁的问题
- ogre线程及其死锁问题
- 计算机中基本类型float值表示和大小比较问题
- CRegKey 操作注册表
- 【经典】WinCE下系统托盘程序之声音控制篇
- 实现王爽老师的 《汇编语言》实验七 计算公司21年的人均收入
- hadoop的java操作方式--RPC示例
- 线程死锁问题
- ASP.NET的JSON序列化与反序列化
- HTTP协议详解
- OGRE Review of 2014
- 图像处理之 YUYV422 To OpenCV IplImage
- poj 2559(单调栈)
- 2015_1_15调研总结
- 实例讲解SQL注入攻击 http://www.csdn.net/article/2015-01-13/2823533-SQL?reload=1 作者zer0Black
- OPENCV 测试Mat