【发布时间】:2021-03-30 10:48:36
【问题描述】:
在单线程环境中具有可重入函数的意义是什么?
我了解,要使函数可重入,它需要能够被中断、被另一个线程进入并恢复,而不会产生任何未定义或不希望的副作用。
我读到了这个问题Threadsafe vs re-entrant。但目前尚不清楚这如何在代码中实际发生:
如果您使用回调或递归函数,您可能会在单线程程序中遇到重入问题。
【问题讨论】:
-
递归函数可以是可重入和单线程的,无需使用中断。
-
该函数可以调用自身(可能带有一个中间函数)。此外,具有中断的环境通常被描述为单线程。
-
据我隐约记得,如果您在 Windows 中工作,您可以让在等待计时器上调用的过程发出信号,即使该程序可能是单线程的。所以想象一下,如果你有一个每半秒关闭一次的定时器来调用你的定时器程序,但它平均需要 1 秒来完成你的定时器程序。所以计时器过程需要是可重入安全的。
-
@PaulMcKenzie 有趣的例子,但它是单线程的事实是否意味着它无论如何都必须等到函数调用完成才能再次调用它?
标签: c++ c multithreading reentrancy