问题标签 [manualresetevent]

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 回答
289 浏览

.net - 在 .NET 中中止线程时,这段代码会损坏吗?

小介绍:

在复杂的多线程应用程序(企业服务总线 ESB)中,我需要使用 Thread.Abort,因为这个 ESB 接受用户编写的与硬件安全模块通信的模块。因此,如果此模块死锁或硬件停止响应 - 我只需卸载此模块,此服务器应用程序的其余部分必须继续运行。

所以有中止同步机制确保代码只能在用户部分中止,并且该部分必须标记为 AbortAble。如果发生这种情况(中止),则有可能在这段代码中抛出 ThreadAbortException:

例如模块在 AbortSection(通过调用类似方法 StartAbortSection 进入),ServerAplication 决定中止用户模块,但在此决定之后但在实际 Thread.Abort 之前,模块通过调用此方法进入 NonAbortableSection,但实际上对该锁定对象进行了锁定.

所以 lock 将阻塞直到 Abort 被执行,但是 abort 也可以在到达这段代码中的这个块之前被执行。但是使用这种方法的对象是必不可少的,我需要确保这段代码在任何时候都可以安全中止(不会被破坏 - 例如,我不知道从字典中读取时会发生什么......)。

所以不得不提一下threadIdMap是Dictionary(int,ManualResetEvent),而锁定对象是ManualResetEvent的实例。

我希望你现在能理解我的问题。对不起它的大。

0 投票
4 回答
6215 浏览

c# - C# 中 Manual/AutoResetEvent 的轻量级替代方案

我已经编写了我希望是在 C#/.NET 中使用 ManualResetEvent 和 AutoResetEvent 类的轻量级替代方案。这背后的原因是具有类似事件的功能,而无需使用内核锁定对象。

尽管代码似乎在测试和生产中都运行良好,但为所有可能性正确处理这种事情可能是一项艰巨的任务,我会谦虚地请求 StackOverflow 人群对此提出任何建设性意见和或批评。希望(经过审查)这对其他人有用。

用法应该类似于用于 Set() 的具有 Notify() 的 Manual/AutoResetEvent 类。

开始:

0 投票
0 回答
1271 浏览

c# - System.Threading.Timer 的 Dispose 方法不适用于 ManualResetEventSlim?

我有以下代码用于示例控制台应用程序来模拟 Windows 服务。

我很惊讶接受 WaitHandle 的 Dispose 重载在使用 ManualResetEventSlim 时从未向句柄发出信号。如果我像这样更改代码以使用 ManualResetEvent ,则确实会发出句柄信号。

是什么赋予了!

0 投票
2 回答
2363 浏览

c# - ManualResetEventSlim 和 Lock

我有一段需要花费大量时间才能获取的数据。我有不同的方法来确定是否应该获取新数据,或者我是否可以使用我当前的“缓存”theResult 当有人询问那条数据时,我希望能够同时进行阻塞和非阻塞返回。

我不确定最好的方法是什么,我正在考虑使用 ManualResetEventSlim 和锁:

非阻塞:

阻塞:

但我不确定这是做那种事情的方法。例如_resetEvent.Wait()里面的lock(...){}?

0 投票
2 回答
2710 浏览

.net - 锁定manualResetEvent时出现死锁

我在锁定 manualResetEvent 实例时遇到了死锁。我不知道如何解决它。我将不胜感激。

我在一个由不同线程执行的类中有 2 个方法:

第一个线程获得了锁并在_event.WaitOne()中被阻塞;

第二个线程执行了 _event.Reset(); 并在尝试执行 lock(_event) 时被阻止。

我认为当线程 1 在 WaitOne 上被阻塞时,应该释放锁。我想我错了。我不知道我该如何解决。顺便说一句 - 我添加了锁,因为锁块中的代码应该在两个线程中同步。

再次感谢,很抱歉这么长的帖子。

0 投票
4 回答
2290 浏览

c# - 我应该使用 ManualResetEvent 作为锁定对象吗?

下面的方法应该在第一次调用时返回 true,对任何其他调用返回 false。

有什么问题吗?使用重置事件进行锁定是否安全?


编辑:在查看您的评论后,我做了一些更改。ManualResetEvent由于以前的设计理念,我被困住了。我其实根本不需要它。

0 投票
1 回答
222 浏览

iphone - 在某些事件上重置应用程序

我正在编写一个 iPhone 应用程序,并且在某个事件(例如,用户赢得游戏)后,我想在应用程序启动后立即将其重置为其初始状态。例如,再次执行 viewDidLoad() 等。在 Xcode 和 Objective C 中是否有一种简单的方法可以做到这一点?谢谢你。

0 投票
3 回答
1009 浏览

windows-phone-7 - 如何等待响应并对其进行操作?

我有一个新问题。我想对响应做一些操作,但我得到一个 NullReferenceException,因为它还没有到达......这是我的代码:

但是当我使用 ManualResetEvent 类时,我的应用程序只是挂起,因为 if(dataReady.WaitOne()) 行。以下是 ManualResetEvent 类的完整代码:

所以,我的问题是:如何等待响应并对其进行操作? (我尝试使用 Application.DoEvent 方法,但它在 WP7 中不存在......)

0 投票
0 回答
124 浏览

c# - 执行嵌入或“独立”的 IPy 脚本时的区别?

正如我在另一篇文章中所写的那样,我目前正在为 IronPython 编写一个 IDE/调试器。

但是现在我遇到了另一个问题。

我有用 C# 编写的库,我从 IronPython 脚本中调用这些库。

当我现在通过“ipy.exe myScript.py”在控制台中运行脚本时,它可以完美运行。但是当我按照以下方式运行它时,我的 C# 库中的线程出现问题。

至少我认为这是线程的问题,因为我等待线程中另一个硬件的答案,而另一个线程被 ManualResetEvent 阻塞并超时。但是在嵌入模式下运行脚本时,会调用超时方法而不是设置事件。

有谁知道这可能来自什么?

0 投票
2 回答
2719 浏览

c# - 为什么不调用 BeginGetResponse 回调?

这是我的代码:

当我调试应用程序时,它输入了 CreateRequest,然后输入了 RequestCallback,但随后它停止并且从不输入 ResponseCallback,而是尝试使用 userId.Text 分配 asnJson 值为 null,因为它没有输入 ResponseCallback。当我做错时,为什么它永远不会进入ResponseCallback?