仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 568|回复: 7
打印 上一主题 下一主题

[学习教程] ASP.NET编程:风趣的多线程编程(4)――逝世锁

[复制链接]
飘飘悠悠 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:34:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
以前学了大概半年时间的asp(没有机会做大系统,最多是自己对公司系统做些调整和修改还有一些小程序)。应该说开始接触asp.net是今年元月5号的事。现在很想把公司的系统重新用.net来架构,却不知道如何下手。编程|多线程//DeadLockSample.cs
//剖析一下为何会产生逝世锁?
  1. usingSystem;usingSystem.Threading;publicclassTest{staticreadonlyobjectfirstLock=newobject();staticreadonlyobjectsecondLock=newobject();staticvoidMain(){newThread(newThreadStart(ThreadJob)).Start();//Waituntilwerefairlysuretheotherthread//hasgrabbedfirstLockThread.Sleep(500);Console.WriteLine("LockingsecondLock");lock(secondLock){Console.WriteLine("LockedsecondLock");Console.WriteLine("LockingfirstLock");lock(firstLock){Console.WriteLine("LockedfirstLock");}Console.WriteLine("ReleasedfirstLock");}Console.WriteLine("ReleasedsecondLock");}staticvoidThreadJob(){Console.WriteLine("                                LockingfirstLock");lock(firstLock){Console.WriteLine("                                LockedfirstLock");//Waituntilwerefairlysurethefirstthread//hasgrabbedsecondLockThread.Sleep(1000);Console.WriteLine("                                LockingsecondLock");lock(secondLock){Console.WriteLine("                                LockedsecondLock");}Console.WriteLine("                                ReleasedsecondLock");}Console.WriteLine("                                ReleasedfirstLock");}}LockingfirstLock
  2. LockedfirstLock
  3. LockingsecondLock
  4. LockedsecondLock
  5. LockingfirstLockLockingsecondLock
复制代码
因应之道,利用Queue和Monitor:
//QueueMonitorThread.cs
  1. usingSystem;usingSystem.Collections;usingSystem.Threading;publicclassTest{staticProducerConsumerqueue;staticvoidMain(){queue=newProducerConsumer();newThread(newThreadStart(ConsumerJob)).Start();Randomrng=newRandom(0);for(inti=0;i<10;i++){Console.WriteLine("Producing{0}",i);queue.Produce(i);Thread.Sleep(rng.Next(1000));}}staticvoidConsumerJob(){//Makesurewegetadifferentrandomseedfromthe//firstthreadRandomrng=newRandom(1);//Wehappentoknowweveonlygot10//itemstoreceivefor(inti=0;i<10;i++){objecto=queue.Consume();Console.WriteLine("                                Consuming{0}",o);Thread.Sleep(rng.Next(1000));}}}publicclassProducerConsumer{readonlyobjectlistLock=newobject();Queuequeue=newQueue();publicvoidProduce(objecto){lock(listLock){queue.Enqueue(o);if(queue.Count==1){Monitor.Pulse(listLock);}}}publicobjectConsume(){lock(listLock){while(queue.Count==0){Monitor.Wait(listLock);}returnqueue.Dequeue();}}}Producing0Consuming0
  2. Producing1Consuming1
  3. Producing2Consuming2
  4. Producing3Consuming3
  5. Producing4
  6. Producing5Consuming4
  7. Producing6Consuming5
  8. Consuming6
  9. Producing7Consuming7
  10. Producing8Consuming8
  11. Producing9Consuming9
复制代码
我也不知道,我原来理解的,NET就是C++编程,只是与JAVA相对,呵呵。以为.ET就是高级C++编程。
沙发
发表于 2015-1-19 16:58:21 | 只看该作者
我觉得什么语言,精通就好,你要做的就是比其他80%的人都厉害,你就能得到只有20%的人才能得到的高薪。
若天明 该用户已被删除
板凳
发表于 2015-1-25 15:57:31 | 只看该作者
我觉得什么语言,精通就好,你要做的就是比其他80%的人都厉害,你就能得到只有20%的人才能得到的高薪。
小妖女 该用户已被删除
地板
发表于 2015-2-3 06:06:34 | 只看该作者
虽然在形式上JSP和ASP或PHP看上去很相似——都可以被内嵌在HTML代码中。但是,它的执行方式和ASP或PHP完全不同。在JSP被执行的时候,JSP文件被JSP解释器(JSPParser)转换成Servlet代码,然后Servlet代码被Java编译器编译成.class字节文件,这样就由生成的Servlet来对客户端应答。所以,JSP可以看做是Servlet的脚本语言(ScriptLanguage)版。
蒙在股里 该用户已被删除
5#
发表于 2015-2-8 19:55:48 | 只看该作者
Servlet却在响应第一个请求的时候被载入,一旦Servlet被载入,便处于已执行状态。对于以后其他用户的请求,它并不打开进程,而是打开一个线程(Thread),将结果发送给客户。由于线程与线程之间可以通过生成自己的父线程(ParentThread)来实现资源共享,这样就减轻了服务器的负担,所以,JavaServlet可以用来做大规模的应用服务。
小魔女 该用户已被删除
6#
发表于 2015-2-26 01:03:50 | 只看该作者
那么,ASP.Net有哪些改进呢?
第二个灵魂 该用户已被删除
7#
发表于 2015-3-15 22:24:00 | 只看该作者
市场决定一切,我个人从经历上觉得两者至少在很长时间内还是要共存下去,包括C和C++,至少从找工作就看得出来,总不可能大家都像所谓的时尚一样,追捧一门语言并应用它。
深爱那片海 该用户已被删除
8#
发表于 2015-3-22 17:08:17 | 只看该作者
我觉得什么语言,精通就好,你要做的就是比其他80%的人都厉害,你就能得到只有20%的人才能得到的高薪。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-11-13 16:06

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表