Tag: 重入

为什么malloc()和printf()表示为不可重入?

在UNIX系统中,我们知道malloc()是一个非重入函数(系统调用)。 这是为什么? 同样, printf()也被认为是不可重入的; 为什么? 我知道重入的定义,但我想知道为什么它适用于这些function。 什么阻止他们保证可重入?

线程安全与重入

最近,我问了一个问题,题目是“malloc线程安全吗? ,在里面我问:“malloc是可重入的吗? 我的印象是所有重入者都是线程安全的。 这个假设是错误的吗?

什么是可重入函数?

大多数 时候 ,再入的定义是从维基百科引用的: 如果一个计算机程序或例行程序在其先前的调用完成之前可以被安全地调用(即,它可以被安全地同时执行),则被描述为可重入的。 重新计算机程序或程序: 不得包含静态(或全局)非常量数据。 不得将地址返回到静态(或全局)非常量数据。 只能在由调用者提供给它的数据上工作。 不能依靠锁来单身资源。 不得修改自己的代码(除非在自己的唯一线程存储中执行) 不得调用非重入式计算机程序或例程。 如何安全地定义? 如果一个程序可以同时安全执行 ,是否意味着它是可重入的? 提到的六点之间的共同点是什么,我应该记住,检查我的代码重入能力? 也, 所有recursion函数都是可重入的吗? 所有线程安全函数都是可重入的吗? 所有recursion和线程安全的函数都是可重入的吗? 在写这个问题的时候,想到的一点是:像再进入和线程安全这样的术语是绝对的,它们是否有固定的具体定义? 因为,如果不是,这个问题不是很有意义。