Linux线程同步(二)---互斥锁实现线程同步

2023-11-13

一 why

先给自己打个广告,本人的微信公众号:嵌入式Linux江湖,主要关注嵌入式软件开发,股票基金定投,足球等等,希望大家多多关注,有问题可以直接留言给我,一定尽心尽力回答大家的问题。
在这里插入图片描述
在博客《Linux线程同步(一)—“初识篇”》中,介绍了为什么需要线程同步,从本篇博客开始介绍如何实现线程同步,本篇主要介绍的是互斥锁实现线程同步。

二 how

Linux提供一把互斥锁mutex(也称之为互斥量)。
每个线程在对资源操作前都尝试先加锁,成功加锁才能操作,操作结束后解锁。
资源还是共享的,线程间也还是竞争的,但通过锁将资源的访问变为互斥操作,而后与时间有关的错误也不会在产生了。
同一个时刻,只能有一个线程持有该锁,比如线程A拥有了这把锁,其他线程都无法拥有这把锁。只有获得这把锁的线程才可以访问临界区,其他没有获得这把锁的线程都无法访问临界区。在这里插入图片描述
互斥锁实质上是是操作系统提供的一把“建议锁”(又称“协同锁”),建议程序中有多线程访问共享资源的时候使用该机制,但是,并没有强制限定。
2.1 相关函数
互斥锁相关的函数主要有:初始化函数,销毁函数,加锁函数,以及解锁函数

初始化
pthread_mutex_init(pthread_mutex_t *restrict mutex, const pthread_mutex_attr *restrict attr)
参数1:传出参数,调用时应传&mutex
    restrict关键字:只用于限制指针,告诉编译器,所有修改该指针指向内存中内容的操作,只能通过本指针完成。不能通过除本指针以外的其他变量或指针修改。
参数2:互斥属性。是一个传入参数,通常传NULL,选用默认属性(线程间共享).
    静态初始化:如果互斥锁mutex是静态分配的(定义在全局,或加了static关键字修饰),可以直接使用宏进行初始化。pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
    动态初始化:局部变量应采用动态初始化。pthread_mutex_init(&mutex, NULL);
销毁
pthread_mutex_destroy(pthread_mutex_t *mutex
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux线程同步(二)---互斥锁实现线程同步 的相关文章

随机推荐

  • JS数组方法&&es5数组新增方法

    1 unshift 给数组的开头添加一个或多个元素 数组名 unshift 一个值或多个值 返回添加以后的新数组的长度 2 push 给数组的末尾添加一个或多个元素 数组 push 一个值或多个值 返回新数组的长度 3 shift 给数组的
  • C++的Json库的简单实现

    我的Json库实现 Json 实现Json 我的源码 点这里 https github com jo qzy MyJson 和效果图 Json库中的类实现 JSON Value类 JSON Reader JSON Writer FastWr
  • 第十二章 Ambari二次开发之集成Alluxio

    1 Alluxio高可用部署 生产环境 使用具有高可用性的模式来运行Alluxio masters 1 1 Alluxio架构 Alluxio可以被分为三个部分 masters workers以及clients 一个典型的设置由一个主服务器
  • MySQL 过滤重复数据

    方法1 加关键字 DISTINCT 在mysql中 可以利用 SELECT 语句和 DISTINCT 关键字来进行去重查询 过滤掉重复的数据 语法 SELECT DISTINCT 字段名 FROM 数据表名 DISTINCT 关键字的语法格
  • HTML+CSS+JavaScript写计算器

    思维导图 代码 HTML div div div div div div
  • TestNg多线程—— 并行执行测试

    多线程并行执行测试 可以通过参数设置来实现不同级别的多线程配置测试 1 test级别的多线程测试 每个
  • 第二章:25+ Python 数据操作教程(第十八节如何使用 Matplotlib 库在 python 中执行绘图和数据可视化)持续更新中

    本教程概述了如何使用 Matplotlib 库在 python 中执行绘图和数据可视化 这篇文章的目的是让您熟悉该库的基础知识和高级绘图功能 它包含几个示例 将为您提供使用 Python 生成绘图的实践经验 目录 什么是 Matplotli
  • phpshe v1.7漏洞复现(Sql injection+XXE)

    前几天研究了一下xss的绕过 这两天准备深入研究下sql注入的审计 首先自动审计一波 看到疑似的一个变量覆盖点 点进去看原来是 register globals的隐患消除 简单来说如果这个配置设置为On的话 从客户端传输过来的任意参数值会被
  • jboss 热部署

    文章目录 JBoss EAP 6 4 0 GA AS 7 5 0 Final redhat 21 JBoss EAP 6 4 0 GA AS 7 5 0 Final redhat 21
  • 一文学会动态规划

    系列文章目录 注意 在学习理论之前 希望读者能看如下几个例子 有助于理解 算法导论 学习 十七 动态规划之钢条切割 C语言 算法导论 学习 十八 动态规划之矩阵链乘 C语言 算法导论 学习 十九 动态规划之最长公共子序列 C语言 文章目录
  • 浅谈数据挖掘——频繁模式、序列挖掘与搜索优化算法

    本系列将从下面几方面谈谈最近的一点点收获 令声明 本文主要是对我找到的一个莫名其妙国外英文pdf文件的学习与解读 因为我也没有找到他的出处 也没作者也没学校 所以我仅以此段文字向这个未知的作者致敬 本文主要处于科普类的理解 列出的主要算法并
  • SpringBoot学习之单点登录

    SpringBoot学习之单点登录 单点登录 登录 注销 部署 实现 主要功能 重要步骤 sso client拦截未登录请求 sso server拦截未登录请求 sso server验证用户登录信息 sso server创建授权令牌 sso
  • 直播运营岗

    一 理论知识 直播基础知识 直播团队构成 直播工作流程 中控工作流程 中控话术 二 界面操作 电商罗盘 巨量百应 直播伴侣 发单打单 产品链接 三 进阶学习 千川投放 直播复盘 四 面试规划 简历制作 职业生涯规划 1 直播基础知识 1 1
  • 银河麒麟桌面操作系统安装 postgreSQL13(源码安装)

    1 首先下载源码postgres wget http ftp postgresql org pub source v13 1 postgresql 13 1 tar bz2 2 解压 tar xjvf postgresql 13 1 tar
  • visual studio 2017 installer 安装包制作过程出现的问题---无法注册模块 HRESULT -2147024769 请与您的技术支持人员联系...

    使用visual studio 2017 installer制作打包程序时如果用到了外部控件需要按以下方式操作 1 将应用程序及应用程序所用到的所有DLL拷贝到打包目录 加入打包程序之中 2 将应用程序的XXX dll或XXX ocx的Re
  • STM32 C++编程系列一:STM32 C++编程介绍

    一 STM32及其他单片机开发现状 在目前绝大部分的单片机开发当中 C语言占据着主流的地位 但由于C语言本身是一种面向过程的语言 因此在当前利用面向对象思想构建可复用代码为主流的今天显得比较麻烦 很多人写单片机程序时都会遇到一个问题 明明写
  • 大数据采集概述

    文章目录 大数据采集概述 1 互联网大数据与采集 1 1互联网大数据来源 1 社交媒体 2 社交网络 3 百科知识库 4 新闻网站 5 评论信息 6 位置型信息 1 2 互联网大数据的特征 1 大数据类型和语义更加丰富 2 数据的规范化程度
  • 内存溢出问题解决思路

    内存溢出问题解决 一 常规解决思路 首先 在JVM参数配置时需要配置内存溢出后dump出内存的快照来 配置如下 XX HeapDumpOnOutOfMemoryError XX HeapDumpPath 内存快照 hprof输出路径 然后
  • 理解Java类加载的步骤

    前言 与在编译时需要进行 连接 工作的语言不同 在Java语言里 类的加载 连接 初始化过程都是在程序运行期间完成的 这种策略虽然牺牲了一小部分性能 但是大大增加了Java的灵活性 Java里天生可以动态拓展的语言特性就是依赖运行期动态加载
  • Linux线程同步(二)---互斥锁实现线程同步

    一 why 先给自己打个广告 本人的微信公众号 嵌入式Linux江湖 主要关注嵌入式软件开发 股票基金定投 足球等等 希望大家多多关注 有问题可以直接留言给我 一定尽心尽力回答大家的问题 在博客 Linux线程同步 一 初识篇 中 介绍了为