问题标签 [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.
c - 在信号处理程序中仍应避免使用全局变量但退出的函数?
当我研究了一些关于用 C 进行 unix 编程的知识时,我了解到在信号处理程序中应该避免无法重入的函数,但是如果我有类似的东西:
myExit 在哪里
并且 fileFd 是一个全局变量,如果我没记错的话,这使得 myExit 成为不可重入的......但在信号处理程序中使用它仍然是一个问题,即使它会导致程序退出?谢谢,如果这是一个愚蠢的问题,任何帮助表示赞赏和抱歉。
bison - 使用积分 YYSTYPE 使 bison/flex 解析器可重入
我在按照步骤使我的 bison/flex 解析器可重入时遇到了麻烦。
问题似乎出在词法分析器中。由于所有解析器都是可重入的,我不能再直接分配 yylval。相反,根据Flex 手册,我必须调用此函数:
但问题是,YYSTYPE 是一个整数类型。它不是动态分配的值,也根本不是左值,所以我不能将指针传递给它!我是否遗漏了什么,如果没有,我应该如何设置 yylvalue?我从来没有遇到过不可重入解析器的这个问题!
更新:好的,我想我可能已经解决了积分类型的问题。现在解析器似乎崩溃了,因为没有设置输入,而且我没有找到任何关于如何告诉词法分析器从哪里读取输入的文档。
弹性文件:
野牛档案:
在解析器的这一行发生崩溃:
我怀疑我可能没有为解析正确初始化所有内容。手册在这个主题上非常混乱,经常引用类型或变量而不解释它们来自哪里或为什么使用它们。我以这种方式调用解析:
通过阅读源代码,yylex_init 正在分配 astruct yyguts_t
并将其清零。当我到达崩溃时,yy_cp 是一个空指针,实际上整个struct yyguts_t
仍然是零!所以我怀疑我没有正确初始化某些东西,这导致它不知道从哪里获得输入。
最终编辑:我将把这个问题标记为已回答我的原始问题,并将新问题作为新问题重新打开。
c - 此 netbsd 代码是否可重入
我正在通过阅读 NetBSD 源代码来研究“阅读代码”。
(有兴趣的可以看<代码阅读:开源视角>我正在阅读)
我发现了这个功能:
它引入了 4 个不同的临时缓冲区来包装 inet_ntoa 函数,因为 inet_ntoa 不是可重入的。
但在我看来,这个 naddr_ntoa 函数也不是可重入
的:静态 bufno 变量可以由其他变量操作,因此临时缓冲区在这里似乎没有按预期工作。
那么这是一个潜在的错误吗?
c - 需要变量平均的可重入函数
这是一个非常基本的问题,我只是想不出一个好的解决方案。我有一些代码是超级循环类型的架构(无操作系统)。函数中有一些需要求平均值的变量:即需要连续三次输入相同的结果才能调用条件“真”。我的老板现在正在推动所有这些函数可重入,这意味着我的静态局部变量的旧方法不好。他也不想要额外的全局变量。那么有没有另一种好方法来保持多个上下文的条件平均,以允许函数完全可重入?
当前代码示例:
java - 强制解锁可重入锁
我有一个可重入锁,我将它包装在一个自定义类中以满足我自己的需要。但是,由于应用程序的性质,持有可重入锁的锁的线程会卡住(外部故障)并且无法释放可重入锁。
我想知道是否有一种方法可以显式解锁可重入锁?我知道可重入锁的 API 没有这样的方法 - 但是我正在考虑引入一个计时器任务,该任务将在一段时间后解锁可重入锁或杀死持有可重入锁的线程。
尝试强制解锁我的可重入锁还有其他建议吗?我的解决方案很漂亮,所以我问。
c - 在线程安全和可重入代码中使用 utf8proc
我正在重构一个遗留的 C 应用程序以使其能够识别 Unicode。它目前char*
用于字符串。我遇到过utf8 library,但文档很少,我无法确定它是否适合用于预期是线程安全和可重入的代码中。
有谁知道 utf8proc 是否可以在线程安全(POSIX)、可重入代码环境中使用的明确答案?
timer - Dart:使用零持续时间计时器是支持将工作推迟到事件循环的方式
我通过实验发现创建一个持续时间为 0 的计时器可以让我将工作推迟到事件队列中。我真的很喜欢这个功能,因为它可以避免很多讨厌的重入问题。这是不会改变的故意功能吗?可以添加到文档中吗?如果没有,是否有支持的方法来做到这一点?
python - Python 信号处理程序和重入
Python 中的信号处理程序是可重入的吗?
我有一个定时器的信号处理程序,它每秒对堆栈进行多次快照 - 它是一个统计分析器。如果需要太长时间,我的信号处理程序可以重新输入吗?如果是这样,我该如何保护它?
我的代码:
c# - 框架是否有专门的 api 来检测重入?
我想禁止大量方法的重入。
对于单一方法,此代码有效:
对每种方法都这样做很乏味。
所以我使用了 StackTrace 类:
它工作正常,但看起来更像是一个黑客。
.NET Framework 是否有特殊的 API 来检测重入?
process - VHDL中的过程是可重入的吗?
一个进程是否可以连续运行两次或多次VHDL
?
如果在进程的顺序执行未完成时发生另一个事件(在敏感信号列表上)会发生什么?
有可能还是我VHDL
为流程考虑的模型完全错误?