函数的可重入和线程安全是针对于2种不同的使用场景提出的概念。
可重入函数这一概念是针对于一个进程中单个线程,指的是一个函数如果在调用期间被中断,在中断中再次进入这个函数执行完毕后,恢复原来的中断点执行时,不会出现错误。
线程安全这个概念是针对多进程,多线程编程中产生的。指的是一个函数被并发调用时,任意一个调用不会影响到它的另一个调用。一个函数对多个线程来说是可重入的,那么它就是线程安全的。
可重入
信号可以视为软件中断,在信号处理函数中举例不可重入函数:
1.函数中使用了静态变量
1 #include <signal.h> 2 #include <stdio.h> 3 4 char *foo(char *str) 5 { 6 static char buffer[1024]; 7 int index; 8 9 for (index = 0; str[index]; index++) 10 { 11 buffer[index] = toupper(str[index]); 12 } 13 buffer[index] = '