![]() |
1
2
您使用的EventWaitHandle类不正确。重置事件不应用于向多个线程发出信号。相反,您需要为每个线程创建一个重置事件,然后当您准备好了,在它们之间循环并使用set()。主线程不应调用reset()方法。可以说,每根线都应该负责关闭它们后面的门。 下面是一个基本示例:
|
![]() |
2
3
我也有同样的问题,令人惊讶的是,在网络上找不到任何好的解决方案来解决这种松散耦合/失火和忘记/多个侦听器类型的事件,所以这里是我想到的。
请注意解决方案的超时时间介于
所以要求是:
诀窍是使用自动设置事件,因为它们不存在争用条件问题,而是为每个侦听器定义一个。我们事先不知道侦听器的数量,但我们可以固定最大数量的侦听器(上面描述的“n”):
以下是向所有潜在侦听器引发事件的发布者代码:
下面是接收事件通知的侦听器代码:
|
![]() |
3
0
此处使用的同步类型不正确。您应该使用信号量类来代替事件,使用您希望允许的同时访问的数量。 您可能还需要两个信号量,第二个信号量用于触发事件以进行检查的代码(响应事件的代码将保持锁定),以防您不希望快速连续发生两个事件,并让一段代码进入另一个事件的尾部。 |
![]() |
user107586 · 如何处理等待句柄不会导致无限循环? 6 月前 |
![]() |
ron burgundy · 获取-释放语义是否跨线程传递?[副本] 6 月前 |
![]() |
BenjiFB · C#内存缓存:在一次操作中追加到列表? 6 月前 |
![]() |
András Takács · Python多线程问题 10 月前 |
|
András Takács · Python多线程错误 10 月前 |