【Linux】详细介绍Linux重入不可重入带例子

这篇具有很好参考价值的文章主要介绍了【Linux】详细介绍Linux重入不可重入带例子。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在Linux中,重入性指的是一个函数可以安全地在同时被多个线程或进程调用时正确地执行。不可重入性则表示一个函数在被并发调用时可能会导致不确定的行为或数据损坏。

不可重入

以下是一些示例:

  1. 静态变量:当函数使用静态变量时,可能会导致不可重入性。因为静态变量是在函数的整个生命周期内存在的,如果多个线程同时调用该函数,它们可能会修改或读取同一个静态变量,从而导致数据竞争和不一致的结果。
int not_reentrant()
{
    static int counter = 0;
    counter++;
    return counter;
}
  1. 全局变量:与静态变量类似,全局变量也可能导致不可重入性。多个线程同时访问全局变量时可能会引发竞争条件和数据不一致的问题。
int global_var = 0;

int not_reentrant()
{
    global_var++;
    return global_var;
}
  1. 动态内存分配:当函数在堆上分配内存并返回指向该内存的指针时,如果多个线程同时调用该函数,它们可能会分配相同的内存地址,导致内存泄漏或访问冲突。
char* not_reentrant()
{
    char* buffer = malloc(sizeof(char) * 100);
    // 使用 buffer 进行操作
    return buffer;
}
  1. 使用全局或静态缓冲区:如果函数使用全局或静态缓冲区来存储中间结果,而多个线程同时调用该函数,并且函数会在缓冲区上进行写操作,可能会导致数据竞争和不可预测的结果。
char global_buffer[100];

char* not_reentrant()
{
    // 使用 global_buffer 进行操作
    return global_buffer;
}

可重入

  • 不使用全局变量或静态变量
  • 不使用用malloc或者new开辟出的空间
  • 不调用不可重入函数
  • 不返回静态或全局数据,所有数据都有函数的调用者提供
  • 使用本地数据,或者通过制作全局数据的本地拷贝来保护全局数据

可重入与线程安全联系

  • 函数是可重入的,那就是线程安全的
  • 函数是不可重入的,那就不能由多个线程使用,有可能引发线程安全问题
  • 如果一个函数中有全局变量,那么这个函数既不是线程安全也不是可重入的。

他们的区别文章来源地址https://www.toymoban.com/news/detail-731409.html

  • 可重入函数是线程安全函数的一种
  • 线程安全不一定是可重入的,而可重入函数则一定是线程安全的。
  • 如果将对临界资源的访问加上锁,则这个函数是线程安全的,但如果这个重入函数若锁还未释放则会产生死锁,因此是不可重入的。

到了这里,关于【Linux】详细介绍Linux重入不可重入带例子的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux 可重入、异步信号安全和线程安全

    当一个被捕获的信号被一个进程处理时,进程执行的普通的指令序列会被一个信号处理器暂时地中断。它首先执行该信号处理程序中的指令。如果从信号处理程序返回(例如没有调用exit或longjmp),则继续执行在捕获到信号时进程正在执行的正常指令序列(这和当一个硬件中

    2024年02月11日
    浏览(23)
  • 【Linux】信号--信号的捕捉/可重入函数/volatile/SIGCHLD信号

    用户态的的时候,进行以下操作:1.操作系统自身的资源(getpid,waitpid…)2.硬件资源(printf, write,read) 用户为了访问内核或者硬件资源,必须通过系统调用完成访问。实际执行系统调用”人是“进程”,但是身份其实是内核。往往系统调用比较费时间一些,所以尽量避免频繁调用系

    2024年02月04日
    浏览(30)
  • C语言操作符详细介绍

    目录 前言 一、原码、反码、补码的基础概念 1.原码 2.反码 3.补码 二、原码、反码、补码的计算方法 1.原码 2.反码 3.补码 三、算术操作符 四、移位操作符 1. 左移操作符 移位规则: 2. 右移操作符 移位规则: (1) 逻辑移位 (2) 算术移位 五、位操作符 1. 按位与运算(AND)

    2024年02月11日
    浏览(39)
  • 【初阶C语言】实用调试技巧(详细介绍)

    Bug一词的原意是“昆虫”或“虫子”;而在电脑系统或程序中隐藏着的一些未被发现的缺陷或问题,人们也叫它“bug”。“Bug”的创始人格蕾丝·赫柏(Grace Murray Hopper),是一位为美国海军工作的电脑专家,也是最早将人类语言融入到电脑程序的人之一。而代表电脑程序出错

    2023年04月09日
    浏览(34)
  • 初阶C语言——特别详细地介绍函数

     💓作者简介: 加油,旭杏,目前大二,正在学习 C++ , 数据结构 等👀 💓作者主页:加油,旭杏的主页👀 ⏩本文收录在:再识C进阶的专栏👀 🚚代码仓库:旭日东升 1👀 🌹欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖        从标题也能看出来,我们有要进行 超详细

    2024年02月14日
    浏览(24)
  • C语言sort()函数的使用 详细介绍

    qsort()函数(quick sort)是快速排序算法,可以排序任意数据类型的数组其中就包括整形,浮点型,字符串甚至自定义的结构体类型。 下图是4个参数的含义 我们要排序一个数组,首先要知道从哪儿开始排序,所以先把首元素地址传给qsort函数。  我们还要知道数组从哪里结束,但

    2024年02月05日
    浏览(34)
  • 详细介绍C语言指针(九千字完结篇)

    本文是指针的完结篇,介绍了函数指针和练习,函数指针数组和计算器的简易实现,认识函数指针数组指针,认识回调函数和qsort排序库函数以及回调函数的使用(模拟实现qsort库函数) 指针初阶篇-指针进阶篇-指针完结篇 在c语言中函数又称子程序,是为了分模块实现各种不同功能而设

    2023年04月13日
    浏览(30)
  • Linux基本指令详细介绍 【Linux】

    功能:对于目录,该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息 常用: -a 列出目录下的所有文件,包括以 . 开头的隐含文件。 ls -a -l 和 ls -al 、 ls -la 这三者是一样的 显示所有的文件 ,包括隐藏文件 -d 将目录象文件一样显示,而不是显示

    2024年02月08日
    浏览(33)
  • C语言 文本文件读取、写入与定位(详细介绍)

    目录 文本文件相关介绍 1.打开文件 2.文件的读取  (1) fgetc 函数 (2)fgets 函数 (3)fscanf 函数 (4)fread 函数 3.关闭文件 fclose(FILE *stream ); 4.文件的写入 (1)fpuc 函数 (2)fputs 函数 (3)fprintf 函数 (4)fwrite 函数 5.文本文件的指针定位 (1)rewind 函数  (2)fseek 函数    

    2024年01月22日
    浏览(37)
  • 主流开发语言和开发环境介绍

    Tips:TIOBE排行榜是根据互联网上有经验的程序员、课程和第三方厂商的数量,并使用搜索引擎(如Google、Bing、Yahoo!)以及Wikipedia、Amazon、YouTube和Baidu(百度)统计出排名数据,只是反映某个编程语言的热门程度,并不能说明一门编程语言好不好,或者一门语言所编写的代码数

    2024年02月21日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包