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

 更新时间:2017年06月08日 09:04:33   投稿:lqh  
这篇文章主要介绍了Linux 中可重入函数与不可重入函数详解的相关资料,需要的朋友可以参考下

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

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

相关文章

  • linux 中more、less 和 most 的区别

    linux 中more、less 和 most 的区别

    more 是一个老式的、基础的终端分页阅读器,它可以用于打开指定的文件并进行交互式阅读。这篇文章主要给大家介绍linux 中more、less 和 most 的区别,感兴趣的朋友跟随小编一起看看吧
    2018-11-11
  • 利用Xshell进行文件传输的方法

    利用Xshell进行文件传输的方法

    文章介绍了如何使用Xshell连接到靶机或服务器,进行提权、修改密码、打包和传输文件的操作,感兴趣的朋友一起看看吧
    2025-03-03
  • linux下定时执行任务的方法及crontab 用法说明(收集整理)

    linux下定时执行任务的方法及crontab 用法说明(收集整理)

    这篇文章主要介绍了 linux下定时执行任务的方法及crontab 用法说明(收集整理),需要的朋友可以参考下
    2017-04-04
  • 一键备份gitolite服务器的Shell脚本

    一键备份gitolite服务器的Shell脚本

    这篇文章主要介绍了一键备份gitolite服务器的Shell脚本,需要的朋友可以参考下
    2014-09-09
  • getcwd cannot access parent directories错误解决方法

    getcwd cannot access parent directories错误解决方法

    这篇文章主要介绍了getcwd cannot access parent directories错误解决方法,在Linux下执行命令时有时会无意中遇到这个错误,这只是一个意外错误,解决方法很简单,需要的朋友可以参考下
    2015-01-01
  • Csh的基本语法介绍

    Csh的基本语法介绍

    这篇文章主要介绍了Csh的基本语法,讲解了变量、数组、命令替换、命令行参数、IO重定向和管道等内容,需要的朋友可以参考下
    2014-11-11
  • shell脚本编程实现9*9乘法表

    shell脚本编程实现9*9乘法表

    这篇文章主要介绍了shell脚本编程实现9*9乘法表,本文直接给出实现代码,并同时总结了实现代码中的知识点,需要的朋友可以参考下
    2015-03-03
  • Shell脚本中的echo命令使用介绍

    Shell脚本中的echo命令使用介绍

    这篇文章主要为大家介绍了Shell脚本中的echo命令使用介绍,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • Linux batch命令详解(在系统不繁忙的时候执行定时任务)

    Linux batch命令详解(在系统不繁忙的时候执行定时任务)

    batch命令 用于在指定时间,当系统不繁忙时执行任务,用法与at相似,这篇文章主要介绍了Linux batch命令(在系统不繁忙的时候执行定时任务),需要的朋友可以参考下
    2024-02-02
  • linux 比较两个文件夹diff不同 (diff命令, md5列表)

    linux 比较两个文件夹diff不同 (diff命令, md5列表)

    这篇文章主要介绍了linux 比较两个文件夹diff不同 (diff命令, md5列表),比较文件夹diff,可以直接使用diff命令,也可以比较文件md5列表,下面通过实例给大家介绍下,感兴趣的朋友跟随脚本之家小编一起学习吧
    2018-05-05

最新评论