Linux操作系统之线程安全

news2025/3/11 15:43:27

一、引入线程安全

  1. 关于strtok函数不能在多线程中使用,为什么?

运行结果

原因如下:在strtok内部会有一个全局变量静态指针(static char* ptr),一开始指针指向主线程的a,等到后面子线程开始分割时,这个指针又指向了子线程的数字,覆盖掉了ptr。(所以这个函数不能在多线程中使用),所以这类函数我们称为非线程安全函数,或者不可成重用函数。

修改方法:可以设置各自的ptr,自己用自己的ptr ,而不使用全局变量静态指针ptr,这时候我们可以使用stotok_r函数,像这类后面有_r函数,我们成为可重用函数。

修改程序:

运行结果:

二、线程安全的定义

多线程程序无论调度顺序如何,都能得到正确结果。

三、如何保证线程安全

  1. 同步

  1. 使用线程安全函数(可重入函数)

四、多线程的复制(fork)

运行结果:

如果将fork写在fun函数中,则运行结果为:

总结:在进行fork时候,整个进程被赋值,但是在线程中,fork在哪条执行路径哪条执行路径就会被启动,示意图:

五、线程属性(了解)

这段内容参考Linux程序设计 中文第4版(12.6 线程的属性)

如果有时候我们直接创建,并且后面不使用pthread_join的时候,可以设置属性

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

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

相关文章

18 Java反射reflect(类加载+获取类对象+通用操作+设计模式+枚举+注解)

Java反射18 反射reflect18.1 类的加载18.2 Class对象18.3 获取类对象的3种方法18.4 反射通用操作18.4.1 常见方法18.4.2 通用操作18.5 设计模式18.5.1 概念18.5.2 好处18.5.3 工厂设计模式18.5.4 单例模式18.6 枚举18.7 注解18.7.1 概念18.7.2 定义注解18.7.3 注解属性类型18.7…

知名休闲服饰品牌——慕尚集团借力泛微实现统一办公、业务协同

客户简介 宁波中哲慕尚控股有限公司(以下简称慕尚集团)是中国知名的由新零售模式驱动的休闲时尚服饰多品牌运营公司。 旗下品牌有GXG,gxgjeans,gxg.kids,MODE COMMUTER等,覆盖时尚男女装、童装市场和其他时尚领域。2019年5月慕尚集团正式登…

不要在线上滥用CopyOnWriteArrayList,姿势不对性能真的很拉胯

从JDK1.5版本,JAVA提供了线程安全的List增强版CopyOnWriteArrayList,其保持线程安全的方式是:每次修改数据时,不会直接修改数据,而是把数据复制出来一份,对复制出来的数组进行操作。 通过这样的机制&#…

【图像算法】马赛克识别

【目的】 校验视频中出现马赛克的频率,抽象成将视频切割成图片,对每张代测图片进行自动化验证。 【实现】 图像边缘检测算法识别 算法步骤: 使用高斯滤波器,以平滑图像,滤除噪声。计算图像中每个像素点的梯度强度和…

buuctf-web-[BJDCTF2020]Easy MD51

打开环境一个简单的页面查看源代码一个get传参,随便输入试试看输入1,1",1,均无反应,每次遇到这种有输入框的都以为是sql注入,但是题目为md5标头里面看到提示select * from admin where passwordmd5($pass,true)搜索相关漏洞,…

gost 常用tunnel配置示例(隧道模式)

gost是用golang语言实现的一个安全隧道。地址位于:https://github.com/ginuerzh/gost是一个不可多得的隧道工具。至于什么是隧道? 就是可以通过这个工具传输一些其他协议的数据。就像这个样子。隧道有什么用呢?可以起到一些加速的作用或者流量…

Array.prototype.from()

Array.from() 用于将类数组对象或可迭代对象转化为一个新的浅拷贝数组实例。 let arr Array.from({length:3},(_,i)>({id:item-${i1}}))console.log(arr)Array.from()转换数组 // Array.from 转换成数组let arr2 Array.from(chixinAwen)console.log(arr2) 示例&#xff1a…

如何免安装使用 Python?推荐 17 个在线的 Python 解释器

安装 Python 很容易,但或许你正在用智能手机/平板电脑,在用不允许安装软件的电脑,或者因为其它原因无法安装 Python。那么,如何通过免安装的方式使用 Python 呢? 本文将介绍 17 个免费的 Python 解释器和交互式 Shell…

百里挑一,4款免费又实用的软件,用一次就爱上

好看的皮囊千篇一律,实用的软件百里挑一,下面几款软件都是笔者收集多年所得,实用且免费。 1、坚果云 这是一款颠覆许多人认知的网盘工具,免费使用无广告,不限速的优点就比某度网盘强百倍,支持任何设备&…

AOP案例:测量业务层接口万次执行时间

测量业务层接口万次执行时间1. 准备1.1 service层:1.2 dao层:1.3 SpringConfig配置类:2. AOP2.1 通知类2.2 测试类:3. 问题及改进1. 准备 需求:任意业务层接口执行均可显示执行的时长; 切入点配置&#x…

(day9) 自学Java——常用API

AIP就是Java已经写好的各种功能的java类 目录 1.Math 2.System 3.Runtime 4.Object 5.对象工具类Objects 6.BIgInteger 7.BigDecima 8.正则表达式 (1)爬虫 (2)带条件爬取,贪婪爬取和识别正则的两个方法 (3)捕获分组和非捕获分组 9.JDK7以前时间相关类 …

一起自学SLAM算法:12.3 autoware导航系统

连载文章,长期更新,欢迎关注: 上面介绍的ros-navigation和riskrrt导航系统主要都是用于机器人的低速导航,并且大多基于2D地图。而autoware导航系统主要用于无人驾驶汽车的高速导航,并且基于3D地图。除了所导航速度高一…

软件工程(一)——软件开发模型和方法

目录 (一)软件开发方法 (二)瀑布模型 (三)原型模型 (四)螺旋模型与增量模型 (五)V模型、喷泉模型、RAD模型 (六) 统一过程(RUP) …

idea 中 connot run program “svn“ 系统找不到文件

idea 中 connot run program “svn“ 系统找不到文件1. idea中svn的问题1.1 idea connot run program "svn"1.1.1 解决办法-重装svn1.2 idea中check out灰色不可用1.2.1 解决办法—装插件1. idea中svn的问题 1.1 idea connot run program “svn” 如图:…

2023年机床工具行业研究报告

第一章 行业概况 生产和销售机床工具的行业。机床是指制造机器的机器,亦称工作母机或工具机,习惯上简称机床。一般分为金属切削机床、锻压机床和木工机床等。现代机械制造中加工机械零件的方法很多:除切削加工外,还有铸造、锻造、…

【ES实战】索引生命周期管理(一)

索引生命周期管理ILM(index lifecycle management) 文章目录索引生命周期管理ILM(index lifecycle management)概述版本矩阵主要概念索引生命周期阶段的过渡阶段的执行生命周期中的操作生命周期策略索引翻滚…

AzureRT:一款能够实现各种Azure红队技战术的PowerShell模块

关于AzureRT AzureRT是一款能够实现各种Azure红队技战术的PowerShell模块,在AzureRT的帮助下,广大研究人员可以从攻击者的角度来与Azure和Azure AD进行交互,以此来测试目标环境的安全性。 AzureRT可以帮助广大研究人员测试和处理基于访问令…

【工具】操作PDF推荐的java依赖

Apache PDFBox |一个 Java PDF 库 <dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox-app</artifactId><version>2.0.27</version></dependency> Apache PDFBox - A Java PDF Library Apache PDFBox 库…

超详解线段树(浅显易懂)

一&#xff0c;什么是线段树&#xff1f;线段树是怎样的树形结构?线段树是一种二叉搜索树&#xff0c;而二叉搜索树&#xff0c;首先满足二叉树&#xff0c;即每个结点最多有两颗子树&#xff0c;并且是一颗搜索树&#xff0c;我们要知道&#xff0c;线段树的每个结点都存储了…

用于在过程工业中参数化配置现场设备的移动式解决方案

EndressHauser提供了一个组合套件&#xff08;包含Field Xpert和Softing的mobiLink通信工具&#xff09;&#xff0c;可用于参数化配置和现场调试。 &#xff08;将Softing的mobiLink通信工具与EndressHauser的Field Xpert SMT70或SMT77平板电脑相结合使用&#xff0c;可为用户…