c# – 多等待句柄

c# – 多等待句柄,第1张

概述我有以下代码: public void MethodA(){ MyManualResetEvent.Reset();}public void MethodB(){ MyManualResetEvent.Set();} 当使用MyManualResetEvent.WaitOne()来停止线程时,如果另一个线程调用了MethodA而不是MethodB,则此方法有效. 我现在 我有以下代码:

public voID MethodA(){    MyManualresetEvent.reset();}public voID MethodB(){    MyManualresetEvent.Set();}

当使用MyManualresetEvent.WaitOne()来停止线程时,如果另一个线程调用了MethodA而不是MethodB,则此方法有效.

我现在要做的是能够两次调用MethodA,另一个线程只在MethodB被调用两次时才继续,而不是只调用一次.

我希望System.Threading命名空间中有一些我不知道的东西.

解决方法 假设您不需要停止同时执行的BlockedMethod即可调用MethodA,这可能最容易通过标准的 Monitor类来解决. MethodA和MethodB共享一个计数器,该计数器记录在没有对MethodB的相应调用的情况下调用MethodA的次数. BlockedMethod方法仅在该计数为0时才进行;如果没有,它等待MethodB发出信号表明是时候继续了.

object mylock = new object();int count = 0;public voID MethodA(){    // record that MethodA is executing    lock (mylock)        count++;    // other code...}public voID MethodB(){    // other code...    lock (mylock)    {        // MethodB has Now finished running        count--;        // wake up other thread because it may Now be allowed to run        Monitor.pulse(mylock);    }}public voID BlockedMethod(){    // wait until the number of calls to A and B is equal (i.e.,count is 0)    lock (mylock)    {        while (count != 0)             Monitor.Wait(mylock);    }    // calls to A and B are balanced,proceed...}
总结

以上是内存溢出为你收集整理的c# – 多等待句柄全部内容,希望文章能够帮你解决c# – 多等待句柄所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1217062.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存