可重入内核 & 可重入函数

可重入内核在ULK(深入理解linux内核)中的定义是指若干个进程可以同时在内核态下执行,也就是说多个进程可以在内核态下并发执行内核代码。在单处理器上,只能实现
微观上的串行,宏观上的并行,即任意时刻,只有一个进程真正执行,其他进程处于阻塞或者等待状态。这里的可重入,是指可以多个进程进入内核,并不是重复/重新进入内核
对于linux来说,可重入内核代码包含可重入函数和非可重入函数。
可重入函数是指运行时只改变局部数据结构,不改变全局数据结构;
不可重入函数是指运行该函数时也需要改变全局数据结构。
如果有多个进程进入不可重入函数时,需要相应的锁机制(互斥锁,自旋锁)来保证同一时刻只有一个进程改变涉及到的全局数据。



可重入函数的理解其实比较麻烦,可以从以下阐述:
1.可重入是与多线程无关的,一个函数被同一个线程调用2次以上,得到的结果具有可再现性。则这个函数是可重入的。
2.可重入讲究的是结果可再现性,因此,使用全局(静态)变量的函数,再次调用其函数的结果是不可再现的,这就是前面说的为何要求该函数只修改局部变量
故可重入函数,描述的是函数被多次调用但是结果具有可再现性
     可重入函数条件:
1,不在函数内部使用静态或者全局数据
2,不返回静态或者全局数据,所有的数据都由函数调用者提供
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值