仓酷云

标题: ASP.NET编程:风趣的多线程编程(4)――逝世锁 [打印本页]

作者: 飘飘悠悠    时间: 2015-1-16 22:34
标题: ASP.NET编程:风趣的多线程编程(4)――逝世锁
以前学了大概半年时间的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
我觉得什么语言,精通就好,你要做的就是比其他80%的人都厉害,你就能得到只有20%的人才能得到的高薪。
作者: 若天明    时间: 2015-1-25 15:57
我觉得什么语言,精通就好,你要做的就是比其他80%的人都厉害,你就能得到只有20%的人才能得到的高薪。
作者: 小妖女    时间: 2015-2-3 06:06
虽然在形式上JSP和ASP或PHP看上去很相似——都可以被内嵌在HTML代码中。但是,它的执行方式和ASP或PHP完全不同。在JSP被执行的时候,JSP文件被JSP解释器(JSPParser)转换成Servlet代码,然后Servlet代码被Java编译器编译成.class字节文件,这样就由生成的Servlet来对客户端应答。所以,JSP可以看做是Servlet的脚本语言(ScriptLanguage)版。
作者: 蒙在股里    时间: 2015-2-8 19:55
Servlet却在响应第一个请求的时候被载入,一旦Servlet被载入,便处于已执行状态。对于以后其他用户的请求,它并不打开进程,而是打开一个线程(Thread),将结果发送给客户。由于线程与线程之间可以通过生成自己的父线程(ParentThread)来实现资源共享,这样就减轻了服务器的负担,所以,JavaServlet可以用来做大规模的应用服务。
作者: 小魔女    时间: 2015-2-26 01:03
那么,ASP.Net有哪些改进呢?
作者: 第二个灵魂    时间: 2015-3-15 22:24
市场决定一切,我个人从经历上觉得两者至少在很长时间内还是要共存下去,包括C和C++,至少从找工作就看得出来,总不可能大家都像所谓的时尚一样,追捧一门语言并应用它。
作者: 深爱那片海    时间: 2015-3-22 17:08
我觉得什么语言,精通就好,你要做的就是比其他80%的人都厉害,你就能得到只有20%的人才能得到的高薪。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2