函数的可重入性(Reentrancy)
来源:互联网 发布:windows平台开发swift 编辑:程序博客网 时间:2024/05/29 13:24
什么是可重入?
可重入函数是一个可以被多个任务调用的过程,任务在调用时不必担心数据是否会出错。
在写函数时只要考虑到尽量用局部变量(例如寄存器、堆栈中的变量),对于要使用的全局变量要加以保护(例如采用关中断、信号量等),这样构成的函数就一定是一个可重入的函数。
此外,编译器是否有可重入函数的库,与它所服务的操作系统有关,例如DOS下的BorlandC和MicrosoftC/C++等就不具备可重入的函数库,这是因为DOS是一个单用户单任务的操作系统。为了确保每一个任务控制自己的私有变量,在一个可重入的C函数中,须将这样的变量声名为局部变量。C编译器将这样的变量存放在调用栈上或寄存器里。
在VxWorks中,多个任务可调用同一子函数或函数库。VxWorks系统动态连接工具使这相当容易,这种共享代码让系统更加高效,易于维护。
VxWorks系统主要采用如下的几种可重入技术:
动态堆栈变量
许多子函数只是纯代码,除了动态堆栈变量外没有其他数据。调用程序的参数作为子函数的数据。这种子函数是完全可重入的,多个任务同时使用这种子函数,不会互相影响,因为它们各有自己的堆栈空间。
受保护的全局和静态变量
一些函数库包含公有数据,多个任务的同时调用很可能会导致对公有数据的破坏,使用起来要格外小心。系统采用信号量互斥机制来防止任务同时运行代码的临界区。
任务变量
一些公用函数要求对于每一调用程序都有明确的全局或静态变量值。为了满足这一点,VxWorks提供的任务变量允许4字节变量加入到任务上下文中,当任务切换时变量的值也切换。
编写可重入的函数,必须遵循以下的规则:
1.将所有的局部变量申明为auto(缺省态)或寄存器型。
2.尽量不要使用static或extern变量。如有必要,要用互斥机制进行保护。
个人心得:
在平时代码开发过程中,设计的可重入函数还是比较多的,他的优点,如前面所说,设计可重入函数满足多任务调用同一个函数,是系统更加高效,易于维护。
- 函数的可重入性(Reentrancy)
- 函数可重入性(Reentrancy)
- 函数可重入性(Reentrancy)
- Java锁的可重入性(Reentrancy)
- Java锁的可重入性(Reentrancy)
- 函数可重入性(Reentrancy)概念详解
- 函数可重入性(Reentrancy)概念详解
- 函数可重入性(Reentrancy)概念详解
- Reentrancy
- Java内部锁的可重用性(Reentrancy)
- java 内部锁的可重用性(Reentrancy)
- 可重入性和线程安全性——Reentrancy and Thread-Safety
- 可重入与线程安全(Reentrancy and Thread-Safety)
- 可重入与线程安全(Reentrancy and Thread-Safety)
- Introduction To Reentrancy
- Reentrancy and Thread-Safety
- 可重入 (Reentrancy) 和 线程安全 (Thread-Safe)
- 可重入(Reentrancy)VS线程安全(Thread safety)
- linux下配置java开发环境
- 深入浅出Node.js游戏服务器开发--分布式聊天服务器搭建
- javascript深入理解js闭包
- 深入浅出Node.js游戏服务器开发--分布式聊天服务器搭建2
- c++中的extern "C"
- 函数的可重入性(Reentrancy)
- Eclipse中的那些快捷键(持续更新中。。。望大家多多留言)
- 一些英文面试题(Android)
- 自制即时通信系统:socket网络编程(0)
- 4.2.2 usb调试问题
- JVM学习之-JVM内存结构
- vc中使用mysql数据库表中数据编码问题
- JS笔记
- HTTP 304 错误的详细解释