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

原创 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 主要用于多任务环境中,一个可重入的函数简单来说就是可以被中断...

线程安全与不可重入函数

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

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

kill函数 函数原型: Int kill(pid_t pid, int siq) 功能:既可以向自身发送信号,也可以向其他进程发送信号; 参数: pid>0 将信号sig发给pid进程 pid=0...

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

中断处理函数应该避免调用不可重入函数,因为新的中断可能发生并打断正在执行任务中,如果当前任务调用了一些不可重入的函数,将会产生错误。 一些常用库函数如printf,malloc,free等都是不可重...

可重入函数和线程安全的区别与联系

1 )什么是可重入函数?        可重入函数即表示可以被多个执行流重复进入,意味着只使用自己栈上的变量,可以允许有该函数的多个副本在运行,由于它们使用的是分离的栈,所以不会互相干扰。 举一个不...

可重入函数和线程安全的区别与联系

什么是线程安全:一个函数被称为线程安全的(thread-safe),当且仅当被多个并发进程反复调用时,它会一直产生正确的结果。反之,如果一个函数不是线程安全的,我们就说它是线程不安全的(thread-...

可重入函数

进程捕捉到信号并对其进行处理时,进程正在执行的指令序列就被信号处理程序临时中断,它首先执行该信号处理程序中的指令。如果从信号处理程序返回(例如没有调用exit或longjmp),则继续执行在捕捉到信号...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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