【Linux】面试常考可重入VS线程安全

1.重入与线程安全的概念

  • 线程安全:多个线程并发同一段代码时,不会出现不同的结果。常见对全局变量或者静态变量进行操作,并且没有锁保护的情况下,会出现该问题。
  • 重入:同一个函数被不同的执行流调用,当前一个流程还没有执行完,就有其他的执行流再次进入,我们称之为重入。一个函数在重入的情况下,运行结果不会出现任何不同或者任何问题,则该函数被称为可重入函数,否则,是不可重入函数。

2.常见的线程不安全的情况

  • 不保护共享变量的函数
  • 函数状态随着被调用,状态发生变化的函数
  • 返回指向静态变量指针的函数
  • 调用线程不安全函数的函数

3.常见的线程安全情况

  • 每个线程对全局变量或者静态变量只有读取的权限,而没有写入的权限,一般来说这些线程是安全的
  • 类或者接口对于线程来说都是原子操作
  • 多个线程之间的切换不会导致接口的执行结果存在二义性

4.常见不可重入的情况

  • 调用了malloc/free函数,因为malloc函数是用全局链表来管理堆的
  • 调用了标准I/O库函数,标准I/O库的很多实现都以不可重入的方式使用全局数据结构
  • 可重入函数体内实验了静态的数据结构

5.常见可重入情况

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

6.可重入与线程安全联系

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

7.可重入与线程安全的区别

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/226499.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【网络安全】HTTP Slowloris攻击原理解析

文章目录 Slowloris攻击的概念Slowloris攻击原理Slowloris攻击的步骤其他的DDoS攻击类型UDP FloodICMP (Ping) FloodSYN FloodPing of DeathNTP AmplificationHTTP FloodZero-day DDoS 攻击 推荐阅读 Slowloris攻击的概念 Slowloris是在2009年由著名Web安全专家RSnake提出的一…

Vue3项目中集成mars3D简单三部曲

Vue3项目中集成mars3D简单三部曲 这里是参考网址,大佬可以点击一件跳转 1.安装依赖 npm install vite-plugin-mars3d --save-dev2.修改 vite.config.ts 配置文件 import { defineConfig } from vite; import { mars3dPlugin } from vite-plugin-mars3d;export d…

禁毒知识竞赛流程和规则

禁毒知识竞赛是一项全国性竞赛活动。有着深化全国青少年毒品预防教育,巩固学校毒品预防教育成果的重要作用。本文介绍一场禁毒知识竞赛的完整流程和规则,供单位组织此类活动时参考。 1、赛制 第一轮10进6,第二轮6进4,4支队伍决出…

互联网大厂月薪分布:字节跳动超 5% 员工月薪高于 5 万

近期,某统计机构公开了国内互联网巨头的薪资分布情况。根据统计数据显示,贝壳、阿里、滴滴、拼多多、快手和腾讯等公司超过60%的员工,月薪集中在3-5万的区间。而拼多多和字节跳动更有超过5%的员工月薪超过5万。 华为,一个众所周知…

小程序接口OK,桌面调试接口不行

手机小程序OK,桌面版出现问题; 环境:iis反向url的tomcat服务,提供接口。 该接口post了一个很大的数组,处理时间比较久。 1)桌面调试出现错误,提示 用apipost调用接口同样出错, 502 - Web 服务器在作为网关或代理服…

PostgreSql 序列

一、概述 在 PostgreSQL 中,序列用于生成唯一标识符,通常用于为表的主键列生成连续的唯一值。若目的仅是为表字段设置自增 id,可考虑序列类型来实现,可参考《PostgreSql 设置自增字段》 二、创建序列 2.1 语法 CREATE [ TEMPOR…

redis:四、双写一致性的原理和解决方案(延时双删、分布式锁、异步通知MQ/canal)、面试回答模板

双写一致性 场景导入 如果现在有个数据要更新,是先删除缓存,还是先操作数据库呢?当多个线程同时进行访问数据的操作,又是什么情况呢? 以先删除缓存,再操作数据库为例 多个线程运行的正常的流程应该如下…

在linux下正确安装部署locust

我们在安装python,pip之后,利用pip安装locust并不能执行相应的locust命令,原因是linux下面无像在windows下面pycharm一样的解释器,这个时候需要创建虚拟环境,在虚拟环境下面能运行的环境中,才能运行locust&…

基于QTreeWidget实现多级组织结构

基于QTreeWidget实现多级组织结构以及带Checkbox的选择树 采用基于QWidgetMingw实现的多级组织结构树 通过QTreeWidget控件实现的多级组织结构树。 Qt相关系列文章: 一、Qt实现的聊天画面消息气泡 二、基于QTreeWidget实现多级组织结构 三、基于QTreeWidget实现带Ch…

OceanBase数据库初识

文章目录 说明分布式数据库发展发展历史OceanBase和传统数据库的对比总结 OceanBase数据库产品简介应用案例 OceanBase数据库产品OceanBase数据库内核OceanBase开发者中心(ODC)产品架构OMS核心功能简介 说明 本文仅供学习和交流学习内容参考官方的培训资…

【已解决】解决无法找到sun.misc.BASE64Encoder的jar包的解决方法

idea中可能会出现没有sun.misc.BASE64Encoder的jar包。但是64位编码却需要用到.BASE64Encoder。有以下两种方法: 错误现象: 错误原因: 1.JDK改为8(原因是/lib/tool.jar和/lib/rt.jar已经从Java SE 9中删除)&#xff…

代码随想录二刷 |二叉树 |145.二叉树的后序遍历

代码随想录二刷 |二叉树 |145.二叉树的后序遍历 题目描述解题思路代码实现递归法迭代法 题目描述 145.二叉树的后序遍历 给你一棵二叉树的根节点 root ,返回其节点值的 后序遍历 。 示例 1: 输入:root [1,null,2,…

【算法集训】基础数据结构:九、完全二叉树

完全二叉树是二叉树的一种,它是除了叶子节点外其余各节点都为满二叉树,叶子节点只在倒数第一层或第二层出现。 即使是最后一层的叶子节点也是从左到右依次排列,中间不会空。 每一层都是按从左到右的顺序编号,所以一个节点i的叶子节…

自动化测试(二)selenium八大获取元素方法及对象操作

目录 webdriver API 脚本实例 元素的定位 1. 通过id定位: 2. 通过name方式定位 3. 通过tag name(标签名)定位 4. 通过class name (类名)方式定位 5. 通过CSS 方式定位 6. 通过xpath方式定位 7. link text定位 8. Parti…

[原创][R语言]股票分析实战:周级别涨幅趋势的相关性

[简介]常用网名: 猪头三 出生日期: 1981.XX.XX QQ联系: 643439947 个人网站: 80x86汇编小站 https://www.x86asm.org 编程生涯: 2001年~至今[共22年] 职业生涯: 20年 开发语言: C/C、80x86ASM、PHP、Perl、Objective-C、Object Pascal、C#、Python 开发工具: Visual Studio、De…

【PostgreSQL】从零开始:(一)初识PostgreSQL

从零开始:(一)初识PostgreSQL PostgreSQL数据库介绍为什么使用 PostgreSQL?那么多最终用户,云厂商为什么要贡献核心代码?基于PostgreSQL底层开发的好处:为什么要学习PostgreSQL?截止本文发布之日&#xff0…

将一个带头结点单链表 A分解为A 和 B 使得 A 中为奇数项元素,B 中为偶数项元素,保持其相对顺序不变。

题目描述:将一个带头结点单链表 A分解为A 和 B 使得 A 中为奇数项元素,B 中为偶数项元素,保持其相对顺序不变。 void EvenAndOdd(LinkList &A){LinkList *B (LinkList)malloc(sizeof(LNode));B->next NULL;LNode *p A->next;LN…

数据库 02-03 补充 SQL的子查询(where,from),子查询作为集合来比较some,exists,all(某一个,存在,所有)

子查询: where字句的子查询: 通常用in关键字: 举个例子: in关键字: not in 关键字: in 也可以用于枚举集合: where中可以用子查询来作为集合来筛选元祖。 some,all的运算符号…

一个程序,实现随机随机数据生成自由

shigen坚持更新文章的博客写手,擅长Java、python、vue、shell等编程语言和各种应用程序、脚本的开发。记录成长,分享认知,留住感动。 发现又是好久没有和大家见面了,先给大家分享一下最近的研究方向和成果: 最近接到的…

Shell三剑客:sed(简介)

一、前言 Stream EDitor:流编辑 sed 是一种在线的、非交互式的编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后&…