问题标签 [reentrancy]

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 投票
4 回答
2786 浏览

c++ - 捕获信号并向用户报告问题的便携式方式

如果由于某种奇迹在我们的程序中发生了段错误,我想捕获 SIGSEGV 并让用户(可能是 GUI 客户端)通过单个返回码知道发生了严重问题。同时我想在命令行上显示信息以显示哪个信号被捕获。

今天我们的信号处理程序如下所示:

我可以听到上面的恐怖尖叫,因为我从这个线程中读到从信号处理程序调用不可重入函数是邪恶的。

是否有一种可移植的方式来处理信号并向用户提供信息?

编辑:或者至少在 POSIX 框架内可移植?

0 投票
8 回答
38393 浏览

language-agnostic - C中的可重入函数和递归函数有什么区别?

在 CI 中知道递归函数,但我听说过重入函数。

那是什么?他们之间有什么区别?

0 投票
9 回答
4684 浏览

c# - 我可以向函数添加属性以防止重入吗?

目前,我有一些看起来像这样的功能:

我希望能够像这样声明它们:

有没有我可以添加到函数中以防止重新进入的属性?如果没有,我将如何制作一个?我听说过可用于在函数调用前后添加代码的 AOP 属性;他们合适吗?

0 投票
2 回答
5305 浏览

multithreading - 代码重入与线程安全

“代码重入”“线程安全”的概念有什么区别?根据下面提到的链接,一段代码可以是其中之一,也可以是两者,也可以不是。

可重入和线程安全代码

我无法清楚地理解解释。帮助将不胜感激。

0 投票
2 回答
454 浏览

compact-framework - .NET CF 2.0:可能的单线程重入

一个简单的应用程序是用 CF 2.0 编写的。就我而言,它是单线程的。

该应用程序的两个部分很有趣:一个事件处理程序处理由代表 PDA 的条形码扫描仪(由制造商提供)的类引发的“条形码扫描”事件,以及一个每 30 秒运行一次的 Windows.Forms.Timer 事件处理程序。

最近,该应用程序遇到了一个错误,正如我所见,唯一可能的原因是在 Timer_Tick 事件中间处理 Barcode Scanned 事件。我绝对确定这是不可能的,并且其中一个事件将在队列中等待,直到第一个事件被完全处理。MSDN 中的 Windows.Forms.Timer 页面还确保它是一个常规的单线程计时器。由 Barcode Scanned 触发的代码会更改界面的某些部分,不会导致异常,因此我假设它也是单线程的。不,我们没有使用 DoEvents 等。

任何人都可以肯定地告诉我,这种重入是不可能的,我应该更加努力地寻找其他可能的原因,反之亦然,他们遇到了同样的问题?

0 投票
1 回答
3079 浏览

.net - 检测到重入

我在设置 webbrowser 控件的属性时收到“检测到可重入”MDA 错误。仅当我调用“SetWindowsHookEx”以在同一线程中挂钩某些拨号时才会发生这种情况。

通常,这个挂钩代码可以正常工作,但它与 Webbrowser Control 配合得不好。当我忽略异常代码工作正常时,至少看起来不错,但显然我有点担心。

是否知道为什么发生此错误以及如何解决该问题。

我在 MSDN 中看到了这篇文章 - http://msdn.microsoft.com/en-us/library/ms172237.aspx但它并没有真正帮助。

0 投票
3 回答
47017 浏览

c - 线程安全与可重入

最近,我问了一个问题,标题为“malloc线程安全吗?” ,在里面我问,“malloc 是可重入的吗?”

我的印象是所有可重入都是线程安全的。

这个假设是错误的吗?

0 投票
2 回答
1659 浏览

wcf - WCF 嵌套回调

背景:我正在尝试将由 ADO 1.0 DBServerSyncProvider 的同步服务触发的服务器端ApplyChangeFailed事件转发给客户端。Sync Services冲突解决的所有代码示例都没有使用WCF,当客户端直接连接到服务器数据库时,不存在这个问题。但是,我的 DBServerSyncProvider 由无头 WCF 服务包装,并且我无法向用户显示包含有问题数据的对话框以供查看。

因此,显而易见的解决方案似乎是将 Sync Services 生成的 HTTP WCF 服务转换为 TCP,使其成为双工连接,并在接收SyncConflict对象并设置事件的 Action 属性的客户端上定义一个回调处理程序。

当我这样做时,我得到了一个运行时错误(在尝试回调之前):

System.InvalidOperationException:此操作将死锁,因为在当前消息完成处理之前无法接收到回复。如果要允许无序消息处理,请在 CallbackBehaviorAttribute 上指定 Reentrant 或 Multiple 的 ConcurrencyMode。

所以我按照消息的建议做了,并用 Multiple 属性修饰了服务和回调行为。然后运行时错误消失了,但调用导致“死锁”并且永远不会返回。我该怎么做才能解决这个问题?在原始服务调用返回之前,是否不可能有一个回调客户端的 WCF 服务?

编辑:我认为可能是对问题的解释,但我仍然不确定正确的解决方案应该是什么。

0 投票
5 回答
1386 浏览

java - 可重入锁定

请提供一些帮助,请考虑下面的代码。

我读到当 LoggingWidget 中的 doSomething() 被调用时,JVM 会先尝试获取 LoggingWidget 上的锁,然后再获取 Widget 上的锁。

我很想知道原因。是因为 JVM 知道 doSomething() 调用了 super.doSomething() 还是因为调用子类方法也总是会获取超类上的锁。

干杯

0 投票
4 回答
2589 浏览

c++ - 这个函数是可重入的吗?

我认为这个函数是可重入的,因为它不使用任何全局变量。它只修改参数。

我的问题是:这个函数是可重入的吗?如果是,我的论点是否足够好?

提前致谢