linux可重入函数编程,linux send 是可重入函数吗

满意答案

dcebd7a0de6265b6ccae5ead692f1eab.png

xy8686586

2016.12.10

dcebd7a0de6265b6ccae5ead692f1eab.png

采纳率:51%    等级:7

已帮助:711人

可重入函数(即可以被中断的函数)可以被一个以上的任务调用,而不担心数据破坏。可重入函数在任何时候都可以被中断,而一段时间之后又可以恢复运行,而相应的数据不会破坏或者丢失。

可重入函数使用的变量有两种情况:

1.使用局部变量,变量保存在CPU寄存器中或者堆栈中;

2.使用全局变量,但是这时候要注意保护全局变量(防止任务中断后被其它任务改变变量)。

?

1

2

3

4

5

void strcpy(*dest,*src)

while(* dest++ = *src ++){;}

*dest = NUL;

分析:上面的函数用于字符串复制,而参数是存放在堆栈中的,故而改函数可以被多任务调用,而不必担心各个任务调用期间会互相破坏对方的指针。

基本上下面的函数都是不可重入的:

1.函数内使用了静态的数据。

2.函数内使用了malloc()或者free()函数的。

3.函数内调用了标准的I/O函数的。

?

1

2

3

4

5

6

7

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.使用信号量(互斥条件)。

总之:要保证中断是安全的

00分享举报

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值