当前位置: 首页 > news >正文

【Linux系统】线程安全与死锁问题

线程安全与重入问题

概念

线程安全:就是多个线程在访问共享资源时,能够正确的执行,不会相互干扰或破坏彼此的执行结果。一般情况下,多个线程并发访问一段只有局部变量的代码时,不会出现不同的结果。但是对全局变量或静态变量而言,在没有锁保护的前提下,很容易出现问题。

重入:同一个函数被不同的执行流调用,当一个执行流还没有执行完这个函数,另一个执行流就开始执行了这个函数,我们称之为重入,既一个函数多个执行流同时调用。当重入后函数的运行结果不会出现问题,我们称做可重入函数。反之,为不可重入函数。

常见线程不安全情况:

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

常见不可重入的情况:

调用了malloc/free函数,因为malloc函数是用全局链表来管理堆的 调用了标准IO库函数,标准IO库的函数很多都是以不可重入的方式设计的 在可重入函数中使用了静态的数据结构

总结

函数是可重入的,那就是线程安全的!而线程是安全的,其函数不一定是可重入的。

思考

STL的是否线程安全?

不安全。因为STL的设计初衷就是堆性能极致的开发,而一旦涉及到加锁保证安全的环节,其性能就会大打折扣,所以STL是默认是不安全的。在多线程的环境下需要我们自己来保证安全。

智能指针是否安全?

安全。

对于unique_ptr,由于只在当前的代码块中生效,所以不涉及到线程安全问题。

对于shared_ptr,多个对象需要共用一个引用计数,所以会存在线程安全的问题。但是标准库在实现时考虑到了这个问题,让share_ptr的引用计数采用原子性的计数方式,解决了这一问题。


死锁问题

死锁:指在一组进程中的各个进程均占用不会释放的资源,但因互相申请被其他进程不会释放的资源而处于一种永久等待的状态。

申请一把锁是原子的,但申请两把锁是就不一定了。

当线程之间互相申请对方持有的锁,但不释放自己的锁时,就会造成死锁问题。线程A申请线程B时,B一直不释放,A将会一直进行等待。同样的线程B申请线程A,A一直不释放,B也会一直进行等待。于是线程AB都陷入了一直的等待中。

http://www.cnnetsun.cn/news/1335877.html

相关文章:

  • 立创EDA实战:基于开源方案的USB HUB扩展器PCB设计与焊接调试全记录
  • RimSort:智能模组编排系统如何重构《边缘世界》玩家体验
  • OBS多平台直播配置指南:从入门到精通的完整流程
  • Vue项目避坑指南:Element-ui+SortableJS拖拽排序的那些常见问题
  • Shadow Sound Hunter与VSCode Python环境配置详解
  • 实测Qwen2.5-0.5B:轻量级大语言模型,网页推理速度提升200%
  • 知识图谱RAG检索效果全解析(非常详细),NeurIPS2025论文精华从入门到精通,收藏这一篇就够了!
  • 加密流量分类实战:从数据预处理到模型部署的深度学习全流程解析
  • TCS34725颜色识别模块实战调校:从“不准”到“精准”的进阶之路
  • MedGemma医疗助手实战:从部署到问诊,小白也能用的AI医生
  • CVPR2021黑科技:用PyTorch实现GradInversion图像还原(含Colab notebook)
  • 智能音箱背后的黑科技:从原理到实践全面解析波束形成技术
  • 基于立创逻辑派与高云FPGA的100MHz双通道数字示波器DIY全解析
  • StructBERT Web界面使用指南:相似度可视化标注+向量一键复制实操
  • ROS实战:5分钟搞定pointcloud_to_laserscan包的三维转二维配置(附常见报错解决方案)
  • Qwen3-14B开源模型可持续性:社区维护路线图与vLLM版本升级兼容计划
  • 7大核心优势让思源宋体CN成为设计师与开发者的免费商用字体首选
  • 树莓派4B+USB摄像头实时监控:从fswebcam到mjpg-streamer的完整配置指南
  • Phi-4-reasoning-vision-15B惊艳效果:电商商品详情页截图→卖点提炼+竞品对比
  • 大彩串口屏实战避坑指南:从Lua脚本到控件应用
  • DeepSeek-OCR入门指南:Streamlit非对称布局设计逻辑与交互优化
  • Qt开发环境配置的陷阱:从E1696错误看VS与Qt的版本兼容性
  • AVUE upload组件避坑指南:从参数解析到跨域图片显示的完整解决方案
  • YALMIP最新版对偶变量获取技巧:告别set命令的坑
  • 微信H5页面字体大小适配全攻略:告别错乱,兼容安卓和iOS
  • InternLM2-Chat-1.8B在网络安全领域的应用:威胁情报分析助手
  • 3步焕新受损音频:VoiceFixer让模糊语音重获清晰的AI解决方案
  • Phi-3-vision-128k-instruct实战教程:Chainlit+LangChain多工具图文调用链
  • DLSSTweaks实战进阶:NVIDIA DLSS深度优化技术指南
  • Qwen-Turbo-BF16模型安全防护:防止恶意攻击