可重入函数与不可重入函数

原创 2012年03月23日 00:48:13

       可重入函数和不可重入函数说起来有点拗口,其实写过多进程(线程)程序的人肯定很快就能明白这两种函数是个神马东西。下面是我对这两个函数的理解:

       可重入函数可以理解为是能被中断的函数,并且它被中断返回后也不会出现什么错误。

       不可重入函数可以理解为如果函数被中断的话,就会出现不可预料的错误。这是因为函数中使用了一些系统资源,比如全局变量区,中断向量表之类的。比如多个进程同时对一个文件进行写操作,如果没有同步机制的话,对文件的写入就会变得难以控制。

      在多进程(线程)环境中一定要考虑到函数的可重入性。

      例如下面的例子:

     int sum( int count)
     {
        static int sum = 0;
        int i = 0;
        for (i= 1; index <= count; i++)
            sum += i;
        return sum;
    }

    

       这段代码中使用了static关键字,如果多个进程同时执行这一段代码的话就会出现不可预测的结果。在可重入函数中,一定要避免使用static变量。或者需要使用一定的同步原则才可以。
       要想将上面的代码改为可重入函数,只要将static变量改为非static的变量就可以了。

在编写可重入函数时,如果函数中使用到了全局变量,则应通过关中断、信号量(即P、V操作)等手段对其加以保护,在函数体中尽量使用局部变量。


   

可重入函数c语言

  • 2014年07月29日 09:08
  • 51KB
  • 下载

可重入函数

  • 2008年01月17日 15:19
  • 122KB
  • 下载

不可重入函数

转自:http://www.cppblog.com/franksunny/archive/2007/08/03/29269.html 主要用于多任务环境中,一个可重入的函数简单来说就是可以被中断...

C语言可重入函数及函数编写规范

  • 2009年12月27日 10:50
  • 141KB
  • 下载

线程安全与不可重入函数

一.什仫是不可重入函数?    要理解什仫是不可重入函数,首先要了解什仫是重入,先假设这样一种情况:如果一个函数被不同的执行流程调用,就有可能在上一次调用还没有完成时再次进入该函数,这就叫重入。假设...

信号编程之信号发送及信号处理函数遇到不可重入函数

kill函数 函数原型: Int kill(pid_t pid, int siq) 功能:既可以向自身发送信号,也可以向其他进程发送信号; 参数: pid>0 将信号sig发给pid进程 pid=0...
  • lzjsqn
  • lzjsqn
  • 2016年12月09日 17:51
  • 294

再次深入分析不可重入函数---请小心使用localtime函数

之前, 我们讲过不可重入函数, 现在, 我们继续深挖一下
  • stpeace
  • stpeace
  • 2014年04月24日 23:53
  • 6387

不可重入函数与线程安全函数

在多线程或有异常控制流的情况下,当某个函数运行到中途时,控制流(也就是当前指令序列)就有可能被打断而去执行另一个函数. 如果在这种情况下不会出现问题,比如说数据或状态不会被破坏,行为确定。那么这个函数...

不可重入函数与线程安全函数

在多线程或有异常控制流的情况下,当某个函数运行到中途时,控制流(也就是当前指令序列)就有可能被打断而去执行另一个函数. 如果在这种情况下不会出现问题,比如说数据或状态不会被破坏,行为确定。那么这个函数...

Linux中断函数应避免使用不可重入函数

中断处理函数应该避免调用不可重入函数,因为新的中断可能发生并打断正在执行任务中,如果当前任务调用了一些不可重入的函数,将会产生错误。 一些常用库函数如printf,malloc,free等都是不可重...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:可重入函数与不可重入函数
举报原因:
原因补充:

(最多只允许输入30个字)