红楼梦金玉良缘故事:重入的概念
来源:百度文库 编辑:中财网 时间:2024/05/11 17:08:54
编写中断服务程序不是一件容易的事情。很多时候,中断服务程序必须写成可重入代码(或纯代码,pure code)。所谓可重入代码是指,程序的运行过程中可以被打断,并由开始处再次执行,并且在合理的范围内(多次重入,而不造成堆栈溢出等其他问题),程序可以在被打断处继续执行,并且执行结果不受影响。 由于在多线程环境中等其他一些地方进行程序设计时也需要考虑这个因素,因此这里着重讲一下可重入代码的编写。 可重入代码最主要的要求就是,程序不应使用某个指定的内存地址的内存(对于高级语言来说,这通常是全局变量,或对象的成员)。如果可能的话,应使用寄存器,或其他方式来解决。如果不能做到这一点,则必须在开始、结束的时候分别禁止和启用中断,并且,运行时间不能太长。 下面用C语言分别举一个可重入函数,和两个非可重入函数的例子(注. 这些例子应该是在某本多线程或操作系统的书上看到的,遗憾的是我想不起来是哪本书了,在这里先感谢那位作者提供的范例): 可重入函数: void strcpy(char* lpszDest, char* lpszSrc){
while(*dest++=*src++);
*dest=0;
} 非可重入函数 char cTemp; // 全局变量 void SwapChar(char* lpcX, char* lpcY){
cTemp = *lpcX; *lpcX = *lpcY; lpcY = cTemp; // 引用了全局变量,在分享内存的多个线程中可能造成问题
} 非可重入函数 void SwapChar2(char* lpcX, char* lpcY){
static char cTemp; // 静态变量
cTemp = *lpcX; *lpcX = *lpcY; lpcY = cTemp; // 引用了静态变量,在分享内存的多个线程中可能造成问题
} 中断利用的是系统的栈。栈操作是可重入的(因为栈可以保证“先进后出”),因此,我们并不需要考虑栈操作的重入问题。使用宏汇编器写出可重入的汇编代码需要注意一些问题。简单地说,干脆不要用标号作为变量是一个不错的主意。 使用高级语言编写可重入程序相对来讲轻松一些。把持住不访问那些全局(或当前对象的)变量,不使用静态局部变量,坚持只适用局部变量,写出的程序就将是可重入的。
while(*dest++=*src++);
*dest=0;
} 非可重入函数 char cTemp; // 全局变量 void SwapChar(char* lpcX, char* lpcY){
cTemp = *lpcX; *lpcX = *lpcY; lpcY = cTemp; // 引用了全局变量,在分享内存的多个线程中可能造成问题
} 非可重入函数 void SwapChar2(char* lpcX, char* lpcY){
static char cTemp; // 静态变量
cTemp = *lpcX; *lpcX = *lpcY; lpcY = cTemp; // 引用了静态变量,在分享内存的多个线程中可能造成问题
} 中断利用的是系统的栈。栈操作是可重入的(因为栈可以保证“先进后出”),因此,我们并不需要考虑栈操作的重入问题。使用宏汇编器写出可重入的汇编代码需要注意一些问题。简单地说,干脆不要用标号作为变量是一个不错的主意。 使用高级语言编写可重入程序相对来讲轻松一些。把持住不访问那些全局(或当前对象的)变量,不使用静态局部变量,坚持只适用局部变量,写出的程序就将是可重入的。
引入化合价概念入的原因?
入宅与搬家是两个不同的概念吗?
重定向是什么概念?
程序的 重构 的概念是什么?为什么要重构?
开机快进入windows2000图形界面的时候不停重启
星际争霸中有没有重甲,中甲,轻甲的概念啊?
我若重的CS游戏问题.请高手指教,闲人莫入!!!
为什么我的电脑进不了系统,将近入到系统时自动重启?
新装的系统,总是在快进入系统前就自动重启。
为什么我的电脑开机后进入桌面就自动重起?
老是重新蹬入QQ重起
高手请入~(电脑重起问题)
我在启动电脑的时候,快进入页面的时候,突然又开始重启,是怎么回事啊?
请问各位高手,我的电脑第一次不能开机,重启后进入蓝色的调整画面。
为什么我的电脑老是重起,开防护墙的时候会提示有人在入
参遍空王色相空 一朝重入帝王宫 遗枝拨尽根犹在 喔喔晨鸡孰是雄. 这句话指的是谁?
我的电脑不知道为什么,重起后进入滚动条画面跑2圈就停了
临的概念摹的概念描红的概念
服装的概念和服装设计的概念?
企业的概念,债权转让的概念?!!
什么概念属于基本的法律概念
请superloveo网友解答: 重定向是什么概念?
开机后进入WINDOWS后不久又自动重启
电脑死机,重启后进入安全模式