1、可重入函数
可重入函数指的是可以被中断的函数。也就是说,可以在这个函数执行的任何时刻中断它,转入OS调度下去执行另外一段代码,而返回控制时不会出现什么错误;而不可重入的函数由于使用了一些系统资源,比如全局变量区,中断向量表等,所以它如果被中断的话,可能会出现问题,这类函数是不能运行在多任务环境下的。I/O代码通常不是可重入的,因为它们依赖于像磁盘这样共享的,单独的资源。
2、可重入的条件
不含有静态(全局)非常量数据
不返回静态(全局)非常量数据的地址
只处理由调用者提供的数据
不能依赖于单例模式(Singleton)资源的锁
不能调用不可重入的函数
不能修改函数本身(除非执行在其专有的存储空间)
3、可重入函数与线程安全的函数
线程安全的函数加入同步机制保护共享资源。所有的可重入函数都是线程安全的,反之不成立。
4、Linux的可重入函数
|
_exit & _Exit & exit* |
abort* |
accept |
access |
aio_error |
aio_return |
|
aio_suspend |
alarm |
bind |
cfgetispeed |
cfgetospeed |
cfsetispeed |
|
cfsetospeed |
chdir |
chmod |
chown |
clock_gettime |
close |
|
connect |
creat |
dup |
dup2 |
execle |
execve |
|
fchmod |
fchown |
fcntl |
fdatasync |
fork |
fpathconf |
|
fstat |
fsync |
ftruncate |
getegid |
geteuid |
getgid |
|
getgroups |
getpeername |
getpgrp |
getpid |
getppid |
getsockname |
|
getsockopt |
getuid |
kill |
link |
listen |
longjmp* |
|
lseek |
lstat |
mkdir |
mkfifo |
open |
pathconf |
|
pause |
pipe |
poll |
posix_trace_event |
pselect |
raise |
|
read |
readlink |
recv |
recvfrom |
recvmsg |
rename |
|
rmdir |
select |
sem_post |
send |
sendmsg |
sendto |
|
setgid |
setpgid |
setsid |
setsockopt |
setuid |
shutdown |
|
sigaction |
sigaddset |
sigdelset |
sigemptyset |
sigfillset |
sigismember |
|
signal* |
sigpause |
sigpending |
sigprocmask |
sigqueue |
sigset |
|
sigsuspend |
sleep |
socket |
socketpair |
stat |
symlink |
|
sysconf |
tcdrain |
tcflow |
tcflush |
tcgetattr |
tcgetpgrp |
|
tcsendbreak |
tcsetattr |
tcsetpgrp |
time |
timer_getoverrun |
timer_gettime |
|
timer_settime |
times |
umask |
uname |
unlink |
utime |
|
wait |
waitpid |
write |
513

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



