问题标签 [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 投票
1 回答
212 浏览

c - 在多线程程序的可重入函数中锁定全局数组?

抱歉,如果问题标题令人困惑。我只是想把所有的东西放在一起。我有一段代码,如:

threads[] 是一个全局数组。我想让这个函数可重入,但这意味着据我所知,我不应该使用全局变量。我想这是因为全局变量的值在某个时间是不可预测的。但在我的情况下,数组似乎是可以预测的。

  1. 可以吗,如果我用互斥锁锁定数组以使该函数可重入?
  2. 如果是,那么我该怎么做呢?只需在使用前锁定第一个元素并在使用后解锁?还是在访问时锁定/解锁每个元素更好?
  3. 这甚至可以使这个函数可重入吗?
0 投票
2 回答
1105 浏览

c# - 以下代码是可重入的和线程安全的吗?

下面的代码是可重入的吗?

它是线程安全的,ifthis.NextToExecuteIndex被声明private int NextToExecuteIndex = 0;而不是在其他任何地方计算吗?

0 投票
0 回答
131 浏览

api - 防止重入并强制执行一致的状态

假设我有一个如下所示的 C API:

这些函数被记录为不可重入。我应该尝试强制执行此操作(例如,通过在某处设置标志并返回适当的错误代码)还是应该将 if off 写为未定义的行为?我见过的大多数代码都没有尝试这样做。我只是想知道这是一个有意识的决定还是只是实用主义(或者可能是懒惰)。在我看来,如果你想编写真正健壮的代码,你可能会尝试这样的事情;另一方面,如果您不遵循文档,那么可能所有的赌注都应该取消。

作为负责维护 SDK 的团队的一员,我的经历有时很可怕。尽管我们的文档不是很好,但我在 OEM 支持请求中看到了一些非常奇怪的东西。其中很大一部分源于在另一个函数调用的回调上下文中调用函数。其中大部分都被记录为不受支持,但我们没有任何代码来防止它;事实上,这种情况的大多数情况似乎都有效,但有些情况实际上可能会破坏我们的内部状态。似乎有时强制使用正确的 API 比依靠人们阅读文档更容易。

0 投票
5 回答
974 浏览

java - ReentrantLock:单线程应用程序中的锁定/解锁速度

我正在使用一些 ReentrantLock 来跨多个线程同步对 List 的访问。我只是写一个通用的

到处。不过,我只是注意到,代码中的大多数列表将仅由单个(gui dispatch-)线程使用。

现在我不确定在这些情况下是否应该移除锁,因为它可能会加快我的代码速度。ReentrantLock 有多快?如果线程本身是锁的“先前所有者”,即使他解锁(),lock()操作是否会更快?

0 投票
2 回答
3043 浏览

multithreading - 线程感知和线程安全有什么区别?

线程感知和线程安全有什么区别?

0 投票
1 回答
416 浏览

windows - Windows:如何从(NDIS)内核驱动程序产生线程?

建议使用哪个函数在 NDIS5/6 上下文中生成新线程?寻找可以保证在 IRQL=PASSIVE 下工作的东西(例如,无中生有);通过快速检查ndis.h内容,一无所获。

此外,计划使用一个新生成的线程来调用NdisFreeMemory*家庭,这是否会导致任何问题从不同的线程释放已分配但未使用的内存?

0 投票
2 回答
6464 浏览

c - malloc() 是不可重入但线程安全的?

可能重复:
Malloc 线程安全?

在阅读“Linux 编程接口”时,我并没有感到困惑。

从书中它说 malloc 是不可重入的,因为它操纵全局链表数据结构,但通过使用互斥锁使其成为线程安全的。

我对此有点困惑:由于使用互斥锁是线程安全的,因此可以同时被多个线程调用,为什么它不是可重入函数?(如果我们说可重入意味着它可以被多个调用者同时调用)

另一个问题是,既然 malloc 是线程安全的,我们可以把它放在信号处理程序中吗?我认为答案是肯定的,但我不确定,因为根据这本书,它说只有可重入或异步信号安全函数可以放在信号处理程序中。

谁能给我解释一下?

0 投票
1 回答
384 浏览

boost - Boost中的重入

在使用多线程时,我需要确保我使用的 boost 类是可重入的(即使每个线程都使用自己的对象实例)。

我很难在 Boost 类的文档中找到关于类可重入性的声明。我在这里错过了什么吗?除非文档中另有明确说明,否则所有 Boost 类都是可重入的吗?或者 Boost 关于重入的文档是一个灰色区域?

例如,我在文档中的任何地方都找不到关于 boost::numeric::ublas∷matrix 类的可重入性的声明。那么我可以假设它是可重入的吗?

谢谢!

提供

0 投票
1 回答
753 浏览

c# - 与 WCF 的可重入双工通信

我有一个 C# 程序,它将有多个需要相互通信、执行命令和来回发送数据的实例。现在,这是使用 WM_COPYDATA 完成的,这很麻烦。我想将它升级到使用 NetNamedPipeBindings 的 WCF 系统。但是,无论我尝试什么设置,我都无法使可重入双工通信正常工作。

这将是一个正常的 WCF 调用:

这就是我想要的:

至关重要的是,我希望调用 proxy.foo 的客户端线程与调用 proxy.baz 的线程相同。对于 Windows 消息,这是课程的标准。但无论我尝试什么设置,我都无法通过 WCF 获得这种模式。甚至可能吗?

0 投票
1 回答
630 浏览

multithreading - 线程安全与异步信号安全

在 APUP 第 12.5 节中,提到:

“如果一个函数对于多个线程是可重入的,我们就说它是线程安全的。但是,这并不能告诉我们该函数对于信号处理程序是否是可重入的。”

我很困惑为什么一个函数是线程安全的,但可能不是异步信号安全的。

有例子吗?

谢谢