可重入(Reentrant) vs 线程安全(Thread-Safe)的区别
在并发编程中,可重入和线程安全是两个容易混淆但本质不同的概念。它们的核心区别在于 作用域 和 并发环境下的行为。
1. 可重入(Reentrant)
定义
一个函数或代码块如果在 同一线程 被多次调用(如递归、中断、信号处理)时能正确执行,就称为 可重入。
关键特性
✅ 同一线程安全:可以被同一线程多次进入而不出错。
❌ 不保证多线程安全:如果多个线程同时调用,可能仍然存在竞争条件。
可重入的条件
-
不依赖全局/静态变量(使用局部变量或参数)。
-
不调用非可重入函数(如
malloc、printf在某些实现中不可重入)。 -
不修改共享数据(除非通过锁或原子操作)。
示例
// 可重入函数(仅依赖参数和局部变量)
int add(int a, int b) {
return a + b; // 无共享状态,可重入
}
// 不可重入函数(依赖全局变量)
int counter = 0;
void increment() {
cou

 vs 线程安全(Thread-Safe)&spm=1001.2101.3001.5002&articleId=148059362&d=1&t=3&u=ff50c9af082541f1be4d390e3a77f459)
2745

被折叠的 条评论
为什么被折叠?



