学习笔记(linux高级编程)9

news2024/10/7 19:21:26

void pthread_cleanup_push(void (*routine)(void *), void *arg);

    功能:注册一个线程清理函数

    参数,routine,线程清理函数的入口

         arg,清理函数的参数。

    返回值,无

void pthread_cleanup_pop(int execute);

    功能:调用清理函数

    execute,非0  执行清理函数

             0 ,不执行清理

            

    返回值,无

这两个成对使用


线程控制:互斥与同步

    概念:

    互斥 ===》在多线程中对临界资源的排他性访问。

    互斥机制 ===》互斥锁  ===》保证临界资源的访问控制。

pthread_mutex_t   mutex;

    互斥锁类型        互斥锁变量 内核对象

    框架:

     定义互斥锁 ==》初始化锁 ==》加锁 ==》解锁 ==》销毁

         ****                      ***      ***

     1、定义:

         pthread_mutex_t   mutex;

     2、初始化锁

         int pthread_mutex_init(

             pthread_mutex_t *mutex,

             const pthread_mutexattr_t *attr);

         功能:将已经定义好的互斥锁初始化。

         参数:mutex 要初始化的互斥锁

               atrr  初始化的值,一般是NULL表示默认锁

         返回值:成功 0

                  失败 非零

3、加锁:

         int pthread_mutex_lock(pthread_mutex_t *mutex);

         功能:用指定的互斥锁开始加锁代码

               加锁后的代码到解锁部分的代码属于原子操作,

               在加锁期间其他进程/线程都不能操作该部分代码

               如果该函数在执行的时候,mutex已经被其他部分

               使用则代码阻塞。

         参数: mutex 用来给代码加锁的互斥锁

         返回值:成功 0

                  失败 非零

     4、解锁

         int pthread_mutex_unlock(pthread_mutex_t *mutex);

         功能:将指定的互斥锁解锁。

               解锁之后代码不再排他访问,一般加锁解锁同时出现。

         参数:用来解锁的互斥锁

         返回值:成功 0

                  失败 非零

5、销毁

          int pthread_mutex_destroy(pthread_mutex_t *mutex);

          功能:使用互斥锁完毕后需要销毁互斥锁

          参数:mutex 要销毁的互斥锁

          返回值:成功  0

                   失败  非零

6、trylock

         int pthread_mutex_trylock(pthread_mutex_t *mutex);

         功能:类似加锁函数效果,唯一区别就是不阻塞。

         参数:mutex 用来加锁的互斥锁

         返回值:成功 0

                  失败 非零

                  E_AGAIN

线程的同步 ===》同步 ===》有一定先后顺序的对资源的排他性访问。

    原因:互斥锁可以控制排他访问但没有次序。

    linux下的线程同步  ===》信号量机制 ===》semaphore.h   posix

    sem_open();

    信号量的分类:

    1、无名信号量 ==》线程间通信

    2、有名信号量 ==》进程间通信

框架:

    信号量的定义 ===》信号量的初始化 ==》信号量的PV操作===》信号量的销毁。

阻塞

               1 表示绿灯,进程可以通过执行

         返回值:成功  0

                  失败  -1;

    3、信号量的PV 操作

       P ===》申请资源===》申请一个二值信号量

       V ===》释放资源===》释放一个二值信号量

       P操作对应函数 ==》sem_wait();

       V操作对应函数 ==》sem_post();

    int sem_wait(sem_t *sem);

    功能:判断当前sem信号量是否有资源可用。

           如果sem有资源(==1),则申请该资源,程序继续运行

           如果sem没有资源(==0),则线程阻塞等待,一旦有资源

           则自动申请资源并继续运行程序。

           注意:sem 申请资源后会自动执行 sem = sem - 1;

    参数:sem 要判断的信号量资源

    返回值:成功 0

             失败 -1

    int sem_post(sem_t *sem);

    功能:函数可以将指定的sem信号量资源释放

           并默认执行,sem = sem+1;

           线程在该函数上不会阻塞。

    参数:sem 要释放资源的信号量

    返回值:成功 0

             失败 -1;

    4、信号量的销毁

       int sem_destroy(sem_t *sem);

       功能:使用完毕将指定的信号量销毁

       参数:sem要销毁的信号量

       返回值:成功 0

                  失败  -1;

互斥锁和信号量区别:

用的地方:    唯一性互斥访问,    不同线程顺序

个数:        1个锁,             多个锁

上锁解锁对象:同一个线程,        处理顺序用不同锁

产生死锁的主要原因:

(1) 因为系统资源不足。

(2) 进程运行推进的顺序不合适。

(3) 资源分配不当等。

如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则

就会因争夺有限的资源而陷入死锁。其次,进程运行推进顺序与速度不同,也可能产生死锁。

产生死锁的四个必要条件:

(1) 互斥条件:一个资源每次只能被一个进程使用。

(2) 请求与保持条件:一个进程因请求资源而阻塞,得到的对已获得的资源保持不放。

(3) 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。(高优先级运行,低优先级拿到锁没释放不运行)

(4) 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。

Linux 里Sudo reboot重启 在配置bash后

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

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

相关文章

Open3D 点云的旋转与平移

目录 一、概述 1.1旋转 1.2平移 二、代码实现 2.1实现旋转 2.2实现平移 2.3组合变换 三、实现效果 3.1原始点云 3.2变换后点云 一、概述 在Open3D中,点云的旋转和平移是通过几何变换来实现的。几何变换可以应用于点云对象,使其在空间中移动或旋…

navicat Lite 版

navicat Lite 版: Navicat 出了一个 Navicat Premium 的Lite版。 官方现在链接:https://www.navicat.com.cn/download/navicat-premium-lite#windows 从官网可以看到现在能够下载最新版本 17,支持各种平台

HSP_11章 Python面向对象编程oop_进阶部分

文章目录 P118_119 Python_封装1. 面向对象编程特征2. 封装介绍3. 封装的细节和好处4. 私有成员5. 代码演示5. 注意事项和使用细节5.1伪私有属性 P120 Python_继承快速入门1. 为什么需要继承2. 继承的基本介绍3. 继承的示意图 4. 继承的基本语法 P121 Python_继承的注意事项和细…

1.5 Canal 数据同步工具详细教程

欢迎来到我的博客,很高兴能够在这里和您见面!欢迎订阅相关专栏: ⭐️ 全网最全IT互联网公司面试宝典:收集整理全网各大IT互联网公司技术、项目、HR面试真题. ⭐️ AIGC时代的创新与未来:详细讲解AIGC的概念、核心技术、…

面向阿克曼移动机器人(自行车模型)的LQR(最优二次型调节器)路径跟踪方法

线性二次调节器(Linear Quadratic Regulator,LQR)是针对线性系统的最优控制方法。LQR 方法标准的求解体系是在考虑到损耗尽可能小的情况下, 以尽量小的代价平衡其他状态分量。一般情况下,线性系统在LQR 控制方法中用状态空间方程描…

工程化:Commitlint / 规范化Git提交消息格式

一、理解Commitlint Commitlint是一个用于规范化Git提交消息格式的工具。它基于Node.js,通过一系列的规则来检查Git提交信息的格式,确保它们遵循预定义的标准。 1.1、Commitlint的核心功能 代码规则检查:Commitlint基于代码规则进行检查&a…

16_C语言编程基础

目录 C语言入门 程序段和代码段 C语言入门实例 英文分号(;) 注释 标识符 保留字 C中的空格 C数据类型 基本类型 sizeof获取存储字节 void类型 变量 C数组 C枚举 C中的左值(lvalue)和右值(rvalue) C常量 变量存储类型 C常用关键字(保留字) 宏定义#define co…

视频孪生助力智慧工厂:可视化安防管理与报警告警

在当今快速迭代的工业4.0时代,智慧工厂已成为提升生产效率、优化资源配置的关键所在。面对日益复杂的生产环境和多元化的业务需求,如何构建一个高效、智能且具备强大适应能力的智慧工厂也成为了众多厂商关注的焦点。为了满足工业制造的转型需求&#xff…

element el-table表格切换分页保留分页数据+限制多选数量

el-table表格并没有相关的方法来禁用表头里面的多选按钮 那么我们可以另辟蹊径&#xff0c;来实现相同的多选切换分页&#xff08;保留分页数据&#xff09; 限制多选数量的效果 <el-table:data"tableData"style"width: 100%">// 不使用el-talbe自带…

DX-11A信号继电器 0.5A 柜内板前接线 约瑟JOSEF

DX-11,11A,11B,11C型信号继电器 DX-11信号继电器 DX-11B信号继电器 DX-11A信号继电器 DX-11C信号继电器 1 用途 该继电器用于直流操作的保护线路中&#xff0c;作为信号指示器。 2 结构和原理 该继电器具有电磁铁和带公共点的三付动合触点及一个信号牌&#xff0c;为电…

什么是原始权益人?

摘要&#xff1a;每天学习一点金融小知识 原始权益人&#xff0c;在资产证券化&#xff08;ABS&#xff09;和公募REITs等金融产品中&#xff0c;指的是证券化基础资产的原始所有者&#xff0c;即金融产品的真正融资方。他们是按照相关规定及约定向资产支持专项计划转移其合法拥…

Victor CMS v1.0 SQL 注入漏洞(CVE-2022-28060)

前言 CVE-2022-28060 是 Victor CMS v1.0 中的一个SQL注入漏洞。该漏洞存在于 /includes/login.php 文件中的 user_name 参数。攻击者可以通过发送特制的 SQL 语句&#xff0c;利用这个漏洞执行未授权的数据库操作&#xff0c;从而访问或修改数据库中的敏感信息。 漏洞详细信…

武汉星起航:跨境电商流量红利爆发,2023年出海企业迎突破增长

在数字时代的浪潮中&#xff0c;中国跨境电商以惊人的爆发力崭露头角&#xff0c;成为全球贸易的璀璨新星。2023年数据显示&#xff0c;跨境电商出口额高达1.83万亿元&#xff0c;同比增长19.6%&#xff0c;这一显著增速不仅刷新纪录&#xff0c;更为众多出海企业带来了前所未有…

MySQL-行级锁(行锁、间隙锁、临键锁)

文章目录 1、介绍2、查看意向锁及行锁的加锁情况3、行锁的演示3.1、普通的select语句&#xff0c;执行时&#xff0c;不会加锁3.2、select * from stu where id 1 lock in share mode;3.3、共享锁与共享锁之间兼容。3.4、共享锁与排他锁之间互斥。3.5、排它锁与排他锁之间互斥3…

TopK问题与如何在有限内存找出前几最大(小)项(纯c语言版)

目录 0.前言 1.知识准备 2.实现 1.首先是必要的HeapSort 2.造数据 其他注意事项 3.TopK的实现 0.前言 在我们的日常生活中总有排名系统&#xff0c;找出前第k个分数最高的人&#xff0c;而现在让我们用堆来在有限内存中进行实现 1.知识准备 想要实现topk问题首先我们要…

【stm32】大一上学期笔记复制

砌墙单片机 外设是什么&#xff1f; ipage 8 nx轴 128 X0-127 y0-63 PWM脉冲宽度调制 PWM脉冲宽度调制 2023年10月13日 基本特性&#xff1a;脉冲宽度调制PWM是一种对模拟信号进行数字编码的方法。广泛引用于电机控制&#xff0c;灯光的亮度调节&#xff0c;功率控制等领域…

科普文:一文搞懂jvm原理(二)类加载器

概叙 科普文&#xff1a;一文搞懂jvm(一)jvm概叙-CSDN博客 前面我们介绍了jvm&#xff0c;jvm主要包括两个子系统和两个组件&#xff1a; Class loader(类装载器) 子系统&#xff0c;Execution engine(执行引擎) 子系统&#xff1b;Runtime data area (运行时数据区域)组件&am…

类和对象【上】【C++】

P. S.&#xff1a;以下代码均在VS2019环境下测试&#xff0c;不代表所有编译器均可通过。 P. S.&#xff1a;测试代码均未展示头文件stdio.h的声明&#xff0c;使用时请自行添加。 博主主页&#xff1a;LiUEEEEE                        …

试用笔记之-收钱吧安卓版演示源代码,收钱吧手机版感受

首先下载&#xff1a; https://download.csdn.net/download/tjsoft/89499105 安卓手机安装 如果有收钱吧帐号输入收钱吧帐号和密码。 如果没有收钱吧帐号点我的注册 登录收钱吧帐号后就可以把手机当成收钱吧POS机用了&#xff0c;还可以扫客服的付款码哦 源代码技术交流QQ:42…

Nuxt3 的生命周期和钩子函数(七)

title: Nuxt3 的生命周期和钩子函数&#xff08;七&#xff09; date: 2024/6/30 updated: 2024/6/30 author: cmdragon excerpt: 摘要&#xff1a;文章阐述了Nuxt3中Nitro生命周期钩子的使用&#xff0c;如nitro:config自定义配置、nitro:init注册构建钩子、nitro:build:be…