Linux可重入函数

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

  PS:以上函数的可重入性也不是绝对的(比如read,recv......都会修改errno)
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值