关闭

抓虫系列(一)从简单程序开始 线程安全

发表于:2011-10-26 09:25

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:熬夜的虫子    来源:51Testing软件测试网采编

  简单的程序也可以存在很多值得思考的地方,作为一名程序员或者架构师,首先要具备的就是追根和追新的心态。抓虫系列的代码我想大部分人都接触过或者犯过这样的错误,有些可能涉及的知识面很基础很浅,留个烂文在此引导新手、路人。虫子尽量将问题放大,追的深一点偏一点,如果大家有其他自己的想法或者补充也可以留爪印。

  PS一下:看了下面的评论,大家有点误会虫子的意思了,此系列的博文旨在抓虫,从抓虫中关注我们的程序中容易出现的问题而并非是找寻更佳的解决方案 嘿嘿~ ~

  先看原始bug程序

classtestObj
2    {     
3        publicobjectResult {get;set; }
4        publicintindex {get;set; }       
5    }
01publicvoidTest()
02       {
03           ManualResetEvent[] MR =newManualResetEvent[20];
04 
05           testObj qq =newtestObj();
06 
07           for(inti = 0; i < 20; i++)
08           {
09               MR[i] =newManualResetEvent(false);
10               qq.index = i;
11               ThreadPool.QueueUserWorkItem(o =>
12               {
13                   Console.WriteLine(qq.index.ToString());
14                   MR[qq.index].Set();
15 
16               }, qq);
17           }
18           WaitHandle.WaitAll(MR);
19       }

  我们的目的是让程序输出0~19。看到这里可能老鸟已经发现程序的问题了。新鸟应该还是继续查虫。老鸟们先卖个关子,虫子把问题引偏,这样好拓展更多的问题。让我们来看看运行结果。

31/3123>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号