|
<p>C#限制方法调用</p>
<p><img src="http://img.baidu.com/img/iknow/icn_point.gif"> 悬赏分:10 -</p>
<p>解决时间:2010-7-20 09:30</p>
<p>请附上代码 比如我用 多线程执行方法 改方法没有执行完时 别的方法不能调用次方法 再比如 我用循环执行一个方法可以需要一分钟 在这一分钟只内任何 成员都不能再调用该方法</p>
<p>问题补充:</p>
<p>我想知道 如何 锁住方法 或者 阻止别人条用方法</p>
<p>提问者: lijianqiang266 - 三级</p>
<p>最佳答案</p>
<p>class MonitorSample</p>
<p>{</p>
<p>private int n = 1; //生产者和消费者共同处理的数据</p>
<p>private int max = 10000;</p>
<p>private object monitor = new object();</p>
<p>public void Produce()</p>
<p>{</p>
<p>lock (monitor)</p>
<p>{</p>
<p>for (; n <= max; n++)</p>
<p>{</p>
<p>Console.WriteLine("妈妈:第" + n.ToString() + "块蛋糕做好了");</p>
<p>//Pulse方法不用调用是因为另一个线程中用的是Wait(object,int)方法</p>
<p>//该方法使被阻止线程进入了同步对象的就绪队列</p>
<p>//是否需要脉冲激活是Wait方法一个参数和两个参数的重要区别</p>
<p>//Monitor.Pulse(monitor);</p>
<p>//调用Wait方法释放对象上的锁并阻止该线程(线程状态为WaitSleepJoin)</p>
<p>//该线程进入到同步对象的等待队列,直到其它线程调用Pulse使该线程进入到就绪队列中</p>
<p>//线程进入到就绪队列中才有条件争夺同步对象的所有权</p>
<p>//如果没有其它线程调用Pulse/PulseAll方法,该线程不可能被执行</p>
<p>Monitor.Wait(monitor);</p>
<p>}</p>
<p>}</p>
<p>}</p>
<p>public void Consume()</p>
<p>{</p>
<p>lock (monitor)</p>
<p>{</p>
<p>while (true)</p>
<p>{</p>
<p>//通知等待队列中的线程锁定对象状态的更改,但不会释放锁</p>
<p>//接收到Pulse脉冲后,线程从同步对象的等待队列移动到就绪队列中</p>
<p>//注意:最终能获得锁的线程并不一定是得到Pulse脉冲的线程</p>
<p>Monitor.Pulse(monitor);</p>
<p>//释放对象上的锁并阻止当前线程,直到它重新获取该锁</p>
<p>//如果指定的超时间隔已过,则线程进入就绪队列</p>
<p>Monitor.Wait(monitor,1000);</p>
<p>Console.WriteLine("孩子:开始吃第" + n.ToString() + "块蛋糕");</p>
<p>}</p>
<p>}</p>
<p>}</p>
<p>static void Main(string[] args)</p>
<p>{</p>
<p>MonitorSample obj = new MonitorSample();</p>
<p>Thread tProduce = new Thread(new ThreadStart(obj.Produce));</p>
<p>Thread tConsume = new Thread(new ThreadStart(obj.Consume));</p>
<p>//Start threads.</p>
<p>tProduce.Start();</p>
<p>tConsume.Start();</p>
<p>Console.ReadLine();</p>
<p>}</p>
<p>}</p>
<p>http://apps.hi.baidu.com/share/detail/11195776 给你看一下这个网站</p>
<p>0</p>
<p>回答者:</p>
<p><img src="http://hiphotos.baidu.com/%B0%D9%B6%C8%D6%AA%B5%C0/pic/item/e68ab90119efb943738da5ac.jpg"></p>
<p>我的她最美d - 四级 2010-7-10 20:59</p>
<p>我来评论>></p>
<p>提问者对于答案的评价:</p>
<p>谢谢了</p>
|
|