补充线程结束方式,资源回收与线程的相互竞争

news2024/12/25 22:52:48

一.补充线程结束的方式

    1.pthread_exit  //pthread_jion

    2.从线程执行函数中return    //此时效果等价于pthread_exit

    3. int pthread_ cancel   (pthread _ t   thread)

    功能:发送取消请求

    参数:thread 表示要发送的线程tid号

   4.任何一个线程调用了exit

   或者主线程(mian函数)return 都会造成进程结束

二.补充线程资源回收

   1.pthread_join   需要自己回收---线程属性(可结合性)

   2. 可分离属性:子进程运行很久结束,设置分离属性

  int pthread _ detach (pthread _ t  thread)

功能:分离线程

参数:thread 要分离的线程tid

返回值:成功返回0,  失败返回错误码

三.进程线程对比

1.线程 线程
线程 CPU执行的最小单位 
进程 资源分配和任务调度基本单位 

2. 各自特点 (优缺点)

 1)创建 和 调度
  线程 
      创建速度快 
      调度速度快 
      
      //并发程度 更高 
      
 2) 安全性 
    
    线程 
        好处:
        共享了进程的数据空间 
        共享数据方面 方便 
        缺点:
          安全性不好                 
          带来资源竞争       

         专门的技术 解决资源竞争  --- 互斥 同步 
    进程 
        进程空间相互独立 
        好处,
            安全性好 
        缺点:
            进程间共享数据不方便      

         进程间通信   (管道,信号,共享内存)

四.线程间的资源竞争:
   共享资源:    临界资源
   临界区  :    访问共享资源(临界资源)那段代码 

机制:
    互斥锁   
    互斥     排他性   --- 要么不访问 要访问就是一次完整操作  (原子操作)
    锁         完成互斥目的  (软件层面上的锁)
    
   
    锁的操作机制 
        框架:
     定义互斥锁 ==》初始化锁 ==》加锁 ==》解锁 ==》销毁
        ****                      ***      ***

 1.定义互斥锁:
    pthread_mutex_t   mutex;
    互斥锁类型        互斥锁变量 内核对象 
 2.初始化锁
    pthread_mutex_init(); //初始化一把锁    
 3.加锁                      //加锁 加在 要访问临界资源的地方 
       pthread_mutex_lock(); //上锁          
 4.解锁 
       pthread_mutex_unlock(); //解锁  临界资源访问之后就解开
 5.销毁
       pthread_mutex_destroy();//销毁一把锁 
    


 pthread_mutex_init()    
 功能:
      初始化 互斥锁 
      
     int pthread_mutex_init(
                     pthread_mutex_t *restrict mutex,
           const pthread_mutexattr_t *restrict attr
                           ); 
    参数:
      @mutex     //就是要初始化的 互斥锁变量 
      @attr      //属性  
                 //NULL 默认属性  --- 普通锁 
                 //读写锁 
                 
                 
       int pthread_mutex_lock(pthread_mutex_t *mutex);
       int pthread_mutex_trylock(pthread_mutex_t *mutex);
       int pthread_mutex_unlock(pthread_mutex_t *mutex); 

       参数:
          @mutex    //要操作的那把锁 
        静态初始化:int pthread_mutex_INITIALIZER(pthread_mutex_t *mutex); 
       int pthread_mutex_destroy(pthread_mutex_t *mutex); //用完之后锁要销毁         

 

 

 

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

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

相关文章

cv2,PIL绘制矩形框与图片的切片(易错)

目录 1. cv2绘制矩形框代码 2. PIL绘制矩形 3. cv2图片的切片 1. cv2绘制矩形框 import cv2# 读取图像 img cv2.imread(img.png)# 绘制矩形框 cv2.rectangle(img, (100, 200), (300, 300), (0, 255, 0), 3)# 显示图像 cv2.imshow(Image with Rectangle, img) cv2.waitKey(0…

LeetCode.20.有效的括号

题目描述: 给定一个只包括 (,),{,},[,] 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个右括号都有…

云原生和安装Ubuntu 22系统

一.云原生简介 2004年开始,Google已在内部大规模地使用容器技术。 2008年,Google将 Cgroups合并进入了Linux内核。2013年,Docker项目正式发布。2014年,Kubernetes项目正式发布。2015年,由Google、Redhat 以及微软等大…

【电路笔记】-π 型衰减器

π 型衰减器 文章目录 π 型衰减器1、概述2、等阻抗π-型衰减器3、π-型衰减器示例14、不等阻抗π-型衰减器5、π-型衰减器示例26、平衡π-型衰减器π-型衰减器常用于射频和微波传输线路中,可以是平衡或非平衡设计 1、概述 π-型衰减器之所以如此命名,是因为其基本布局和设计…

图书借阅会员员工管理小程序开发

图书借阅微信小程序全面升级方案 本图书借阅微信小程序旨在打造一站式、高效便捷的图书管理与借阅平台,支持多书馆无缝切换与一键同步图书信息,为会员提供流畅的在线借书体验,同时赋予员工强大的管理工具,确保从会员到书馆的每一…

File的概述和构造方法

一.路径: 相对路径开头不带盘符。 二.File: 1.File对象: File对象就表示一个路径,可以是文件的路径,也可以是文件夹的路径, 这个路径可以是存在的,也可以是不存在的。 2.File对象常见的构造…

C:指针学习-指针变量—学习笔记

今日伊雷娜: 目录 前言: 1、字符指针变量 1.1 使用字符指针存放字符 1.2 使用字符指针变量存放字符串 2、数组指针变量 2.1 什么是数组指针变量? 2.2 数组指针变量初始化 2.3 关于数组指针类型的解析 3、函数指针变量 3.1 函数地址 …

如何将CSDN文章导出为pdf文件

第一步: 打开想要导出的页面,空白处点击鼠标右键⇒点击“检查”或“check”,或直接在页面按F12键。 第二步: 复制以下代码粘贴到控制台,并按回车。 若提示让输入“允许粘贴”或“allow pasting”,按提示…

InnoDB锁机制和事务管理介绍_案例解答

前言 本文对《Innodb 锁机制和事务管理介绍》这篇文章中的思考题进行解答。查看完解答后如果对原理有疑问的,可以重新看下原文帮助理解。 初始化信息 验证环境:8.0.28 MySQL Community Server,InnoDB引擎,RR隔离级别。 初始化信…

苍穹外卖项目DAY03

苍穹外卖项目Day03 1、菜品管理 1.1、公共字段自动填充 1.1.1、问题分析 业务表中的公共字段: 问题:代码冗余、不便于后期维护 1.1.2、实现思路 自定义注解AutoFill,用于标识需要进行公共字段自动填充的方法自定义切面类AutoFillAspect&…

Mybatis和Mybatis-plus区别和联系

MyBatis 和 MyBatis-Plus 是两个用于 Java 数据持久层的框架,它们在功能和使用场景上有所不同。如果项目需要高度自定义和复杂的 SQL 逻辑处理,且开发团队熟悉 SQL,那么 MyBatis 是一个更好的选择。相反,如果希望提高开发效率&…

EPLAN P8 2024-操作记录

目录 设备标识符包含页面 效果如下​编辑 步骤如下 连接点代号的分隔符创建 效果如下 步骤如下 中断点连接排序 效果如下 步骤如下 触点关联参考位置调整、 效果如下 步骤如下 端子排定义 效果如下 步骤如下 端子排连接 效果如下 离散端子操作如下 连接…

操作系统基础知识:调度器、闲逛进程,闲逛进程的特性,什么事件会触发“调度程序”?

被调度程序选中和时间用完由调度程序引起,调度程序决定: 让谁运行由调度算法决定;运行多长时间由时间片大小决定。 什么事件会触发“调度程序”? 1.创建新进程 2.进程退出 3.运行进程阻塞 4.I/0中断发生(可能唤醒某些阻塞进程) 非抢占式调…

「每周只上一天班」谷歌散漫制度遭前CEO怒斥:输给OpenAI,再下去要输创业公司了

「谷歌决定拥抱生活与工作平衡:更早下班、远程工作,胜过在竞争中取胜。」施密特说道。「而说到初创公司,他们之所以能成功,是因为人们在拼命地工作。」 在本周三公布的一份斯坦福大学公开课视频中,谷歌前 CEO 埃里克・…

机器学习 之 sklearn的使用介绍和如何找到API

scikit-learn(简称 sklearn)是基于python语言的一个第三方机器学习库,它提供了简单而有效的工具来进行数据分析和建模。建立在numpy pandas SciPy和Malpotlib库上,下面是对如何使用 sklearn 以及如何找到其 API 的一个基本介绍&am…

算法:DFS解决FloodFill算法

目录 题目一:图像渲染 题目二:岛屿数量 题目三:岛屿的最大面积 题目四:被围绕的区域 题目五:太平洋大西洋水流问题 题目六:扫雷游戏 题目七:衣橱整理 题目一:图像渲染 有一幅…

Unity MessagePack代替Json让你的数据更小还更快

Unity MessagePack代替Json让你的数据更小还更快 前言项目下载并安装MessagePack编写测试代码添加并设置脚本生成AOT代码编写加载AOT代码文件运行效果 参考 前言 前端给后端发的Json数据有点大,使用MessagePack优化一下(MessagePack原理官网解释的很清晰…

前端案例:极速问诊项目(移动端自适应)(HTML+CSS+JS)

一个简单的移动端案例,模拟不同设备下逻辑分辨率不同,宽高自适应 正常打开整体布局 打开 f12 (ctrl shift M)或者点击左上角图标,将其模拟为移动端设备 在移动设备iPhone6/7/8,逻辑分辨率375的整体布局 其banner图尺…

1.9万亿字节跳动,没钱了?

字节再融资 近期投行圈热度最高的事情,是字节跳动正在积极与相关金融机构展开洽谈,期望对其现有的 50 亿美元贷款进行再融资,期限三年。 若是再融资能成,大概率会成为中国借款人年内进行的最大规模贷款再融资交易事件。 这下可好了…

Cesium for Unreal 打包像素流去掉 CLICK TO START

文章目录 1. 像素流去掉 CLICK TO START问题分析1. 像素流去掉 CLICK TO START 问题 分析 在后缀添加参数:MatchViewportRes=true&HoveringMouse=true 例如: http://192.168.0.106:5027/?MatchViewportRes=true&HoveringMouse