博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux下可重入函数
阅读量:5092 次
发布时间:2019-06-13

本文共 853 字,大约阅读时间需要 2 分钟。

可重入函数(即可以被中断的函数)可以被一个以上的任务调用,而不担心数据破坏。可重入函数在任何时候都可以被中断,而一段时间之后又可以恢复运行,而相应的数据不会破坏或者丢失。
可重入函数使用的变量有两种情况:
1.使用局部变量,变量保存在CPU寄存器中或者堆栈中;
2.使用全局变量,但是这时候要注意保护全局变量(防止任务中断后被其它任务改变变量)。
void strcpy(*dest,*src){    while(* dest++ = *src ++){;}    *dest = NUL;}
分析:上面的函数用于字符串复制,而参数是存放在堆栈中的,故而改函数可以被多任务调用,而不必担心各个任务调用期间会互相破坏对方的指针。
 
基本上下面的函数都是不可重入的:
    1.函数内使用了静态的数据。
    2.函数内使用了malloc()或者free()函数的。
    3.函数内调用了标准的I/O函数的。
int temp; void swap(int *ex1,int *ex2){    temp = *ex1; //(1)    *ex1 = *ex2;    *ex2 = temp;}
分析:该函数中的全局变量temp是的函数变成了一个不可重入的函数,因为在多任务系统中,假如在任务1中调用swap函数,而程序执行到(1)处时被中断,进而执行其它的任务2,而刚好任务2也调用了swap函数,则temp里存的值则会被任务2改变。从而回到任务1被中断处继续执行的时候,temp里存的值已经不再是原来存的temp值了,进而产生了错误。
 
常用的可重入函数的方法有:
1.不要使用全局变量,防止别的代码覆盖这些变量的值。
2.调用这类函数之前先关掉中断,调用完之后马上打开中断。防止函数执行期间被中断进入别的任务执行。
3.使用信号量(互斥条件)。
总之:要保证中断是安全的

  

  

转载于:https://www.cnblogs.com/sinaxyz/archive/2012/09/10/2679440.html

你可能感兴趣的文章
网站压力测试工具webbench使用说明
查看>>
对list集合中对象的多个属性按一定顺序排序
查看>>
再次思考 classpath 环境变量 等
查看>>
IOCP 下行为投递的关键点
查看>>
CheckedListBoxControl 实现复选框的单选与多选功能
查看>>
【最短路径】 SPFA算法优化
查看>>
php基础-php基本语法
查看>>
GC overhead limit exceeded填坑心得
查看>>
extundelete数据恢复
查看>>
ios学习:NSURLConnection 和 Json数据解析
查看>>
06 字符串
查看>>
web前端(八)——ajax与jsonp
查看>>
机器学习的几种主要学习方法
查看>>
获取当前时间getDate()注意点
查看>>
UniMelb Comp30022 IT Project (Capstone) - 2.Vuforia in Unity
查看>>
orm框架与缓存的关系
查看>>
shell脚本实现FTP自动上传文件
查看>>
CGContextRef:mask和layer绘图
查看>>
设计模式之装饰者模式
查看>>
大数据学习资源(上)
查看>>