当前位置: 首页 > news >正文

如何给网站优化gta5房子网站建设中

如何给网站优化,gta5房子网站建设中,一个ip地址做多个网站,手机端网页开发C#多线程学习(六) 互斥对象 原文链接#xff1a;http://kb.cnblogs.com/page/42533/ 本系列文章导航 C#多线程学习(一) 多线程的相关概念 C#多线程学习(二) 如何操纵一个线程 C#多线程学习(三) 生产者和消费者 C#多线程学习(四) 多线程的自动管理(线程池) C#多线程学习(五) 多… C#多线程学习(六) 互斥对象                               原文链接http://kb.cnblogs.com/page/42533/ 本系列文章导航 C#多线程学习(一) 多线程的相关概念 C#多线程学习(二) 如何操纵一个线程 C#多线程学习(三) 生产者和消费者 C#多线程学习(四) 多线程的自动管理(线程池) C#多线程学习(五) 多线程的自动管理(定时器) C#多线程学习(六) 互斥对象 如何控制好多个线程相互之间的联系不产生冲突和重复这需要用到互斥对象即System.Threading 命名空间中的 Mutex 类。 我们可以把Mutex看作一个出租车乘客看作线程。乘客首先等车然后上车最后下车。当一个乘客在车上时其他乘客就只有等他下车以后才可以上车。而线程与Mutex对象的关系也正是如此线程使用Mutex.WaitOne()方法等待Mutex对象被释放如果它等待的Mutex对象被释放了它就自动拥有这个对象直到它调用Mutex.ReleaseMutex()方法释放这个对象而在此期间其他想要获取这个Mutex对象的线程都只有等待。 下面这个例子使用了Mutex对象来同步四个线程主线程等待四个线程的结束而这四个线程的运行又是与两个Mutex对象相关联的。 其中还用到AutoResetEvent类的对象可以把它理解为一个信号灯。这里用它的有信号状态来表示一个线程的结束。 // AutoResetEvent.Set()方法设置它为有信号状态 // AutoResetEvent.Reset()方法设置它为无信号状态 Mutex 类的程序示例 Code using System; using System.Threading; namespace ThreadExample { publicclass MutexSample{static Mutex gM1;static Mutex gM2;constint ITERS 100;static AutoResetEvent Event1 new AutoResetEvent(false);static AutoResetEvent Event2 new AutoResetEvent(false);static AutoResetEvent Event3 new AutoResetEvent(false);static AutoResetEvent Event4 new AutoResetEvent(false);publicstaticvoid Main(String[] args){Console.WriteLine(Mutex Sample ); //创建一个Mutex对象并且命名为MyMutexgM1 new Mutex(true,MyMutex); //创建一个未命名的Mutex 对象.gM2 new Mutex(true);Console.WriteLine( - Main Owns gM1 and gM2);AutoResetEvent[] evs new AutoResetEvent[4];evs[0] Event1; //为后面的线程t1,t2,t3,t4定义AutoResetEvent对象evs[1] Event2; evs[2] Event3; evs[3] Event4; MutexSample tm new MutexSample( );Thread t1 new Thread(new ThreadStart(tm.t1Start));Thread t2 new Thread(new ThreadStart(tm.t2Start));Thread t3 new Thread(new ThreadStart(tm.t3Start));Thread t4 new Thread(new ThreadStart(tm.t4Start));t1.Start( );// 使用Mutex.WaitAll()方法等待一个Mutex数组中的对象全部被释放t2.Start( );// 使用Mutex.WaitOne()方法等待gM1的释放t3.Start( );// 使用Mutex.WaitAny()方法等待一个Mutex数组中任意一个对象被释放t4.Start( );// 使用Mutex.WaitOne()方法等待gM2的释放Thread.Sleep(2000);Console.WriteLine( - Main releases gM1);gM1.ReleaseMutex( ); //线程t2,t3结束条件满足Thread.Sleep(1000);Console.WriteLine( - Main releases gM2);gM2.ReleaseMutex( ); //线程t1,t4结束条件满足 //等待所有四个线程结束WaitHandle.WaitAll(evs); Console.WriteLine( Mutex Sample);Console.ReadLine();}publicvoid t1Start( ){Console.WriteLine(t1Start started, Mutex.WaitAll(Mutex[]));Mutex[] gMs new Mutex[2];gMs[0] gM1;//创建一个Mutex数组作为Mutex.WaitAll()方法的参数gMs[1] gM2;Mutex.WaitAll(gMs);//等待gM1和gM2都被释放Thread.Sleep(2000);Console.WriteLine(t1Start finished, Mutex.WaitAll(Mutex[]) satisfied);Event1.Set( ); //线程结束将Event1设置为有信号状态}publicvoid t2Start( ){Console.WriteLine(t2Start started, gM1.WaitOne( ));gM1.WaitOne( );//等待gM1的释放Console.WriteLine(t2Start finished, gM1.WaitOne( ) satisfied);Event2.Set( );//线程结束将Event2设置为有信号状态}publicvoid t3Start( ){Console.WriteLine(t3Start started, Mutex.WaitAny(Mutex[]));Mutex[] gMs new Mutex[2];gMs[0] gM1;//创建一个Mutex数组作为Mutex.WaitAny()方法的参数gMs[1] gM2;Mutex.WaitAny(gMs);//等待数组中任意一个Mutex对象被释放Console.WriteLine(t3Start finished, Mutex.WaitAny(Mutex[]));Event3.Set( );//线程结束将Event3设置为有信号状态}publicvoid t4Start( ){Console.WriteLine(t4Start started, gM2.WaitOne( ));gM2.WaitOne( );//等待gM2被释放Console.WriteLine(t4Start finished, gM2.WaitOne( ));Event4.Set( );//线程结束将Event4设置为有信号状态}} } 程序的输出结果 结果 Mutex Sample - Main Owns gM1 and gM2 t1Start started, Mutex.WaitAll(Mutex[]) t2Start started, gM1.WaitOne( ) t3Start started, Mutex.WaitAny(Mutex[]) t4Start started, gM2.WaitOne( ) - Main releases gM1 t2Start finished, gM1.WaitOne( ) satisfied t3Start finished, Mutex.WaitAny(Mutex[]) - Main releases gM2 t1Start finished, Mutex.WaitAll(Mutex[]) satisfied t4Start finished, gM2.WaitOne( )Mutex Sample   从执行结果可以很清楚地看到线程t2,t3的运行是以gM1的释放为条件的而t4在gM2释放后开始执行t1则在gM1和gM2都被释放了之后才执行。Main()函数最后使用WaitHandle等待所有的AutoResetEvent对象的信号这些对象的信号代表相应线程的结束。 posted on 2012-05-06 19:01 Hao_Guo 阅读(...) 评论(...) 编辑 收藏 转载于:https://www.cnblogs.com/HaoGuo/archive/2012/05/06/Thread6.html
http://www.pierceye.com/news/48356/

相关文章:

  • 预付做网站订金怎么做账seo运营工作内容
  • mvc网站开发之美Wordpress自建主题视频百度云下载
  • 做网站现在好弄么宁波网站建设xpckj
  • 生成短链接西安网站搜索引擎优化
  • 多少钱算网站好用的国外服务器
  • 郑州建站优化百度竞价排名是哪种方式
  • 网站的代运营双八网站建设
  • 网站建设 业务走下坡增城建设局网站
  • 网站托管服务 重庆问题不大工作室 网站
  • 怎样用文本建一个网站如何用word做简单的网站
  • 门户网站建设情况调研报告鞍山网站设计制作网站
  • 建网站无锡广州建设工程交易中心官网首页
  • 苏州网站建设极简幕枫网站开发毕业答辩
  • 商务网站建设 视频国外做油画的网站
  • 大型网站建设企业东莞常平二手房价最新消息
  • 邹平网站建设公司wordpress最近更新文章插件
  • 中介网站建设263邮箱登录入口官网
  • 国家工业和信息化部网站备案系统网站建设与管理 答案
  • 济南网站建设策划方案python适合网站开发吗
  • 阅读分享网站模板淮北市做网站最好的公司
  • 我想做个网站怎么弄wordpress 微信打赏
  • 博客网站建设基本流程wordpress怎么改cms
  • 比较好的企业建站平台做网站哈尔滨
  • 网站结构如何优化百度高级搜索页面的网址
  • 东莞php网站建设价格公司做网站花销会计分录
  • 长春seo代理计费上海网站关键词优化方法
  • 新闻资讯网站php源码xiu wordpress
  • ipv6在家做网站建立网站就是制作网页吗
  • 网站开发都需要什么软件做视频的免费软件有哪些
  • 长沙市网站制作公司线上营销推广方案有哪些