什么是重入过程?您能举例说明何时使用它?
编辑:此外,多个进程可以在并行中访问重入过程吗?
请提供与维基百科不同的解释方式,因为我不完全理解他们的描述因此我的问题 here
答案 0 :(得分:16)
重新引入背后的想法是,例程可以在执行过程中被调用,并且它仍然可以正常工作。
通常,这是通过仅使用在堆栈上声明的参数和局部变量来实现的(在C术语中,没有static
本地人)。在执行期间不锁定任何全局资源也很重要。
现在,你可能会问,“如果这样一个奇怪的事情会像往常一样多次运行?”嗯,这可能发生的一些方法是:
如果发生任何这些,并且例程正在修改全局(或C static
本地),则新执行可能会消除第一次执行所做的更改。例如,如果将该全局用作循环控制变量,则可能导致第一次执行,当它最终恢复时,循环错误的次数。
答案 1 :(得分:2)
这是一个子程序,可以在它已经激活时调用。例如,递归函数通常是可重入的。从信号处理程序调用的函数也必须是可重入的。可重入函数是线程安全的,但并非所有线程安全函数都是可重入的。
答案 2 :(得分:1)
可重入过程是指在同一时间段内多个用户可以共享程序代码的单个副本的过程。重新入口有两个关键方面:程序代码不能自行修改,每个用户的本地数据必须单独存储。
在共享系统中,重入允许更有效地使用主存储器:程序代码的一个副本保存在主存储器中,但是多个应用程序可以调用该过程。因此,重入过程必须具有永久部分(构成过程的指令)和临时部分(指向调用程序的指针以及程序使用的局部变量的内存)。
过程的每个执行实例(称为激活)都将执行永久部分中的代码,但必须拥有自己的局部变量和参数副本。与特定激活相关联的临时部分称为激活记录。
支持重入过程最方便的方法是通过堆栈。调用重入过程时,激活记录将成为在过程调用
上创建的堆栈帧的一部分