﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>博客园-老刘忙不忙-最新评论</title><link>http://www.cnblogs.com/xd125/CommentsRSS.aspx</link><description>很忙</description><language>zh-cn</language><pubDate>Thu, 13 Dec 2007 01:40:00 GMT</pubDate><lastBuildDate>Thu, 13 Dec 2007 01:40:00 GMT</lastBuildDate><generator>cnblogs</generator><item><title>re: c# 线程同步： 详解lock,monitor,同步事件和等待句柄以及mutex</title><link>http://www.cnblogs.com/xd125/archive/2008/03/30/992406.html#1129633</link><dc:creator>uj</dc:creator><author>uj</author><pubDate>Sun, 30 Mar 2008 03:20:00 GMT</pubDate><guid>http://www.cnblogs.com/xd125/archive/2008/03/30/992406.html#1129633</guid><description><![CDATA[@Chris.W<br>我不是很明白你的问题，为什么要用while(true)呢？<br><br><div align=right><a style="text-decoration:none;" href="http://xd125.cnblogs.com/" target="_blank">uj</a> 2008-03-30 11:20 <a href="http://www.cnblogs.com/xd125/archive/2008/03/30/992406.html#1129633#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: c# 线程同步： 详解lock,monitor,同步事件和等待句柄以及mutex</title><link>http://www.cnblogs.com/xd125/archive/2008/03/29/992406.html#1128864</link><dc:creator>Chris.W</dc:creator><author>Chris.W</author><pubDate>Sat, 29 Mar 2008 07:10:00 GMT</pubDate><guid>http://www.cnblogs.com/xd125/archive/2008/03/29/992406.html#1128864</guid><description><![CDATA[最近我在学习C#下的多线程编程<br>以前做java比较多<br>使用C#(或者说.NET)还是第一次<br>看了这篇文章 很有启发<br>看了之后我想问一个问题<br>希望能给予解惑 不胜感激啊<br><br>public double Result(int seed)<br>{<br>  //...<br>  // Wait for all of the terms to be calculated.<br>  WaitHandle.WaitAll(autoEvents); //[1]<br>  // Reset the wait handle for the next calculation.<br>  manualEvent.Reset(); //[2]<br>  return firstTerm + secondTerm + thirdTerm;<br>}<br>当主线程(第一次)执行到[1]处的代码时<br>如果autoEvents中有任意一个状态是nonsignaled时<br>(autoEvents被初始为false[nonsignaled])<br>主线程将被挂起<br>直到autoEvents所有的事件变为true[signaled]后<br>才会被唤醒并继续执行下去<br>下面假设有两种情况<br>1-CalculateBase先被调度执行，其他三个线程后被调度执行<br> 1-1 CalculateBase被调度执行<br> 1-2 计算baesNumber的值<br> 1-3 设置manualEvent为true[signaled]<br>     这个时候CalculateBase还会继续执行下去了吧？<br>     也就是说CalculateBase将manualEvent设置为true[signaled]后<br>     还会继续执行下去<br>     执行到了manualEvent.Set()之后并跳出到CalculateBase函数<br>     这样CalculateBase线程也就执行结束了<br>     如果不是使用ThreadPool启动这四个线程<br>     而是让这四个线程一直 while(true) 执行下去的话？？？<br>     不知道会有什么问题？？？<br> 1-5 Calculate[First/Second/Third]Term被调度执行<br>     这里又假设CalculateFirstTerm先被调度执行<br> 1-6 CalculateFirstTerm取得随机浮点数<br> 1-7 CalculateFirstTerm等待manualEvent被设置为true[signaled]<br>     由于之前manualEvent已经被CalculateBase线程设置为true[signaled]<br>     所以CalculateFirstTerm线程没有被挂起<br>     会继续往下执行<br>     计算firstTerm的值并把autoEvents对应的值设置为true[signaled]<br>     这个时候CalculateFirstTerm线程执行结束<br> 1-8 CalculateSecondTerm和CalculateThirdTerm的情况如上<br> 1-9 当三个CalculateXXXTerm线程执行完毕之后<br>     主线程被唤醒并马上将manualEvent设置为false[nonsignaled]<br>     计算出三个XXXTerm的和并返回<br>2-其他三个县城先被调度执行之，之后才轮到CalculateBase被调度执行<br>  假设四个线程被调度执行的顺序如下<br>  CalculateFirstTerm线程<br>  CalculateSecondTerm线程<br>  CalculateThiredTerm线程<br>  CalculateBase线程<br> 2-1 CalculateFirstTerm线程被调度执行<br> 2-2 CalculateFirstTerm取得随机浮点数<br> 2-3 CalculateFirstTerm线程等待manualEvent被设置为true[signaled]<br>     由于此时manualEvent还是nonsignaled状态<br>     所以CalculateFirstTerm线程被挂起<br> 2-4 CalculateSecondTerm线程和CalculateThiredTerm线程的执行情况如上<br> 2-5 CalculateBase线程被调度执行<br> 2-6 计算baesNumber的值<br> 2-7 设置manualEvent为true[signaled]<br>     由于这是一个ManualResetEvent<br>     所以三个CalculateXXXTerm线程都被唤起<br>     于是这三个CalculateXXXTerm线程被放到准备执行队列<br>     等待系统的调度<br> 2-8 CalculateBase线程执行完毕<br> 2-9 三个CalculateXXXTerm线程被调度执行<br> 2-10 三个CalculateXXXTerm线程执行结束<br> 2-11 由于三个CalculateXXXTerm线程和CalculateBase线程都执行结束<br>      所以[1]得等待结束<br>      于是控制返回到主线程<br>      随后主线程计算结果并继续下一次计算<br><br>***问题***<br><br>  CalculateFirstTerm线程<br>  CalculateSecondTerm线程<br>  CalculateThiredTerm线程<br>  CalculateBase线程<br>  主线程会同时启动上四个线程<br>  这四个线程会一直执行下去（内部都有 while(true) 无限循环）<br>  那么当主线程从[1]返回后尚未执行到[2]处的代码<br>  CalculateXXXTerm线程就已经开始被调度执行的话……<br><br>  <br><br><br><div align=right><a style="text-decoration:none;" href="http://xd125.cnblogs.com/" target="_blank">Chris.W</a> 2008-03-29 15:10 <a href="http://www.cnblogs.com/xd125/archive/2008/03/29/992406.html#1128864#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: c# 线程同步： 详解lock,monitor,同步事件和等待句柄以及mutex</title><link>http://www.cnblogs.com/xd125/archive/2008/03/29/992406.html#1128853</link><dc:creator>Chris.W</dc:creator><author>Chris.W</author><pubDate>Sat, 29 Mar 2008 07:02:00 GMT</pubDate><guid>http://www.cnblogs.com/xd125/archive/2008/03/29/992406.html#1128853</guid><description><![CDATA[最近我在学习C#下的多线程编程<br>以前做java比较多<br>使用C#(或者说.NET)还是第一次<br>看了这篇文章 很有启发<br><br><div align=right><a style="text-decoration:none;" href="http://xd125.cnblogs.com/" target="_blank">Chris.W</a> 2008-03-29 15:02 <a href="http://www.cnblogs.com/xd125/archive/2008/03/29/992406.html#1128853#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: c# 线程同步： 详解lock,monitor,同步事件和等待句柄以及mutex</title><link>http://www.cnblogs.com/xd125/archive/2008/03/28/992406.html#1127744</link><dc:creator>zhangqian</dc:creator><author>zhangqian</author><pubDate>Fri, 28 Mar 2008 07:27:00 GMT</pubDate><guid>http://www.cnblogs.com/xd125/archive/2008/03/28/992406.html#1127744</guid><description><![CDATA[学习了,谢谢!<br><br><div align=right><a style="text-decoration:none;" href="http://xd125.cnblogs.com/" target="_blank">zhangqian</a> 2008-03-28 15:27 <a href="http://www.cnblogs.com/xd125/archive/2008/03/28/992406.html#1127744#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: c# 线程同步： 详解lock,monitor,同步事件和等待句柄以及mutex</title><link>http://www.cnblogs.com/xd125/archive/2008/01/09/992406.html#1032102</link><dc:creator>tin</dc:creator><author>tin</author><pubDate>Wed, 09 Jan 2008 07:29:00 GMT</pubDate><guid>http://www.cnblogs.com/xd125/archive/2008/01/09/992406.html#1032102</guid><description><![CDATA[九头龙就是个SB!<br><br><div align=right><a style="text-decoration:none;" href="http://xd125.cnblogs.com/" target="_blank">tin</a> 2008-01-09 15:29 <a href="http://www.cnblogs.com/xd125/archive/2008/01/09/992406.html#1032102#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: c# 线程同步： 详解lock,monitor,同步事件和等待句柄以及mutex</title><link>http://www.cnblogs.com/xd125/archive/2007/12/25/992406.html#1013602</link><dc:creator>txdlf</dc:creator><author>txdlf</author><pubDate>Tue, 25 Dec 2007 02:02:00 GMT</pubDate><guid>http://www.cnblogs.com/xd125/archive/2007/12/25/992406.html#1013602</guid><description><![CDATA[不错，又温习了一下～<br>技术实在又通俗易懂，要比那些大谈特谈设计模式的好<br>支持！！！<br><br><div align=right><a style="text-decoration:none;" href="http://xd125.cnblogs.com/" target="_blank">txdlf</a> 2007-12-25 10:02 <a href="http://www.cnblogs.com/xd125/archive/2007/12/25/992406.html#1013602#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: c# 线程同步： 详解lock,monitor,同步事件和等待句柄以及mutex</title><link>http://www.cnblogs.com/xd125/archive/2007/12/15/992406.html#996341</link><dc:creator>风生水起</dc:creator><author>风生水起</author><pubDate>Sat, 15 Dec 2007 15:28:00 GMT</pubDate><guid>http://www.cnblogs.com/xd125/archive/2007/12/15/992406.html#996341</guid><description><![CDATA[顶，写的很不错<br><br><div align=right><a style="text-decoration:none;" href="http://xd125.cnblogs.com/" target="_blank">风生水起</a> 2007-12-15 23:28 <a href="http://www.cnblogs.com/xd125/archive/2007/12/15/992406.html#996341#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: c# 线程同步： 详解lock,monitor,同步事件和等待句柄以及mutex</title><link>http://www.cnblogs.com/xd125/archive/2007/12/14/992406.html#994537</link><dc:creator>老刘很氓</dc:creator><author>老刘很氓</author><pubDate>Fri, 14 Dec 2007 02:15:00 GMT</pubDate><guid>http://www.cnblogs.com/xd125/archive/2007/12/14/992406.html#994537</guid><description><![CDATA[@ICQ<br>MSDN关于这块举的例子在我翻阅相关资料前没有看懂，所以我觉得有必要对MSDN里面的东西做些解释。<br><br><div align=right><a style="text-decoration:none;" href="http://xd125.cnblogs.com/" target="_blank">老刘很氓</a> 2007-12-14 10:15 <a href="http://www.cnblogs.com/xd125/archive/2007/12/14/992406.html#994537#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: c# 线程同步： 详解lock,monitor,同步事件和等待句柄以及mutex</title><link>http://www.cnblogs.com/xd125/archive/2007/12/14/992406.html#994527</link><dc:creator>ICQ</dc:creator><author>ICQ</author><pubDate>Fri, 14 Dec 2007 02:09:00 GMT</pubDate><guid>http://www.cnblogs.com/xd125/archive/2007/12/14/992406.html#994527</guid><description><![CDATA[你在讲MSDN吗。<br><br><div align=right><a style="text-decoration:none;" href="http://xd125.cnblogs.com/" target="_blank">ICQ</a> 2007-12-14 10:09 <a href="http://www.cnblogs.com/xd125/archive/2007/12/14/992406.html#994527#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: c# 线程同步： 详解lock,monitor,同步事件和等待句柄以及mutex</title><link>http://www.cnblogs.com/xd125/archive/2007/12/13/992406.html#994241</link><dc:creator>gguowang</dc:creator><author>gguowang</author><pubDate>Thu, 13 Dec 2007 14:48:00 GMT</pubDate><guid>http://www.cnblogs.com/xd125/archive/2007/12/13/992406.html#994241</guid><description><![CDATA[呵呵 刘老师，受教了啊，多谢啊<br><br><div align=right><a style="text-decoration:none;" href="http://xd125.cnblogs.com/" target="_blank">gguowang</a> 2007-12-13 22:48 <a href="http://www.cnblogs.com/xd125/archive/2007/12/13/992406.html#994241#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>