Linux 中可重入函数与不可重入函数详解

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

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

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

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

      例如下面的例子:

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操作)等手段对其加以保护,在函数体中尽量使用局部变量。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!

RTX 5090要首发 性能要翻倍!三星展示GDDR7显存

三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。

首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。

据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。