问题标签 [resetevent]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1131 浏览

c# - SignalAndWait 用于锁定上下文

我有一个为线程池生成任务的管理器类,每个线程都应该在完成后进行回调。

我使用锁来处理变量和字段,并使用信号来处理线程间通信。我正在寻找的是一种退出当前 lock() 并以原子方式等待信号的方法,例如 SignalAndWait,但对于 locks()。

代码看起来像这样:

这里的问题是 .WaitOne() 不会退出 lock(),因此任何执行回调的线程都会死锁。

我对 WaitOne(Int32, bool exitContext) 寄予厚望,但该上下文似乎是关于远程处理和其他东西,而不是同步。

0 投票
3 回答
2300 浏览

c# - 为什么第二个线程在第一个线程之前被释放,当它们都调用 WaitOne() 并被 AutoResetEvent 释放时?

假设 ThreadA 和 ThreadB 都WaitOne()在同一个 AutoResetEvent 上按此顺序调用。设置事件后,为什么释放 ThreadB 而不是 ThreadA?

我进行了一项测试,以了解当您设置多个线程正在等待的 AutoResetEvent 时会发生什么:

代码当然没用;这只是一个米老鼠的例子。这并不重要/紧急。但无论如何我有兴趣了解更多...

0 投票
2 回答
929 浏览

c# - C# 事件多个发布者到一个订阅者

我有一段代码有两个事件处理程序。我希望这两个事件处理程序通知另一个方法有一些工作要做。

我已经使用 ManualResetEvent 实现了这一点,但我不确定这是否是实现我想要的最佳方式,或者是否有更好的方式。

我遇到的最重要的问题之一是:之后autoEvent.WaitOne(),我做了一些工作,而这些工作会消耗时间。与此同时,另一个事件被触发,并Set()在 genericHandler 再次到达之前被调用WaitOne()。当再次到达 WaitOne 时,它​​会等待另一个Set(),或者如果Set()在到达之前已经调用了 a 则继续WaitOne()

这是在 C# 中实现多个发布者和一个订阅者模式的最佳方式吗?或者我应该使用其他东西而不是 ManualResetEvent?

注意:genericHandler 位于不同的线程中,因为 Event1 和 Event2 具有不同的优先级,所以在处理程序中我检查 Event1 是否有待处理的工作,然后再检查 Event2。