线程同步问题——锁

文章目录

    • 线程同步
    • 互斥锁(互斥量)
      • 相关操作函数
      • 应用
    • 死锁
    • 读写锁
      • 相关操作函数

线程同步

在这里插入图片描述
临界区——代码
临界数据——共享数据
原子操作:不可以被其他操作打断
必须的,用以保证数据的安全性
实现线程同步的方式:

  1. 互斥量(互斥锁)——死锁
  2. 读写锁——多读一写

互斥锁(互斥量)

在这里插入图片描述
在这里插入图片描述

相关操作函数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
不能采用另外的指针对mutex操作。
在这里插入图片描述

应用

  1. 全局区创建互斥量
  2. 主线程初始化
  3. 主线程阻塞——连接终止子线程
  4. 找到操作共享数据的位置(操作位置,不是定义位置)
  5. 在开始操作前 加锁
  6. 在操作结束后 解锁
  7. 主线程释放互斥量
    注意:主线程return 0;对子线程有影响,导致其直接结束了。可以使用pthread_exit(NULL);终止主线程。

死锁

在这里插入图片描述
死锁:因争夺共享资源而造成的一种等待的现象。
死锁场景:(加锁同一组互斥量时,就可能发生死锁)

  1. 忘记释放锁——可以使用 尝试加锁 不阻塞代码
  2. 重复加锁
  3. 多线程多锁,抢占锁资源——一个线程使用多个资源多个锁

读写锁

在这里插入图片描述
读写锁效率比互斥锁高,读锁并发执行,不会进行阻塞。

相关操作函数

在这里插入图片描述

rwlock:读写锁
rdlock:读锁
·wrlock`:写锁

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

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

相关文章

什么是 DNS ANAME 解析?

本人使用谷歌搜索了简中互联网,完全没有找到任何有关 ANAME 的文章……本文该不会是头一份吧 相信大家对于 DNS 的解析方式都不陌生,常见的有 A、CNAME、MX、TXT 记录等等。其中,网站常用的是 A 记录和 CNAME 记录:A 记录用于将域…

【Django学习】(十六)session_token认证过程与区别_响应定制

一、认识session与token 这里就直接引用别人的文章,不做过多说明 网络应用中session和token本质是一样的吗,有什么区别? - 知乎 二、token响应定制 在全局配置表中配置 DEFAULT_AUTHENTICATION_CLASSES: [# 指定jwt Token认证rest_framew…

记一次安装nvm切换node.js版本实例详解

最后效果如下: 背景:由于我以前安装过node.js,后续想安装nvm将node.js管理起来。 问题:nvm-use命令行运行成功,但是nvm-list显示并没有成功。 原因:因为安装过node.js,所以原先的node.js不收n…

Android复习(Android基础-四大组件)—— Activity

Activity作为四大组件之首,是使用最为频繁的一种组件,中文直接翻译为"活动",不过如果被翻译为"界面"会更好理解。正常情况,除了Window,Dialog和Toast , 我们能见到的界面只有Activity。…

RT1052 的四定时器

文章目录 1 Quad Timer,简称:QTMR2 单个通道的框图3 QTMR配置3.1 QTMR1 时钟使能。3.2 初始化 QTMR1。3.2.1 QTMR_Init 3.3 设置 QTMR1 通道 0 的定时周期。3.3.1QTMR_SetTimerPeriod 3.4 使能 QTMR1 通道 0 的比较中断。3.4.1 QTMR_EnableInterrupts 3.…

Docker安装 Mysql 8.x 版本

文章目录 Docker安装 Mysql 8.0.22Mysql 创建账号并授权Mysql 数据迁移同版本数据迁移跨版本数据迁移 Mysql 5.x 版本与 Mysql 8.x版本是两个大版本,这里演示安装Mysql 8.x版本 Docker安装 Mysql 8.0.22 # 下载mysql $ docker pull mysql 默认安装最新…

web学习

TCP/IP体系结构(IP和端口): IP是什么:是计算机在互联网上的唯一标识(坐标,代号),用于在互联网中寻找计算机。 访问网站时:域名会通过DNS(解析服务&#xff…

Vue通过指令 命令将打包好的dist静态文件上传到腾讯云存储桶 (保存原有存储目录结构)

1、在项目根目录创建uploadToCOS.js文件 (建议起简单的名字 方便以后上传输入命令方便) 2、uploadToCOS.js文件代码编写 const path require(path); const fs require(fs); const COS require(cos-nodejs-sdk-v5);// 配置腾讯云COS参数 const cos n…

工程师是怎样对待开源

工程师如何对待开源 本文是笔者作为一个在知名科技企业内从事开源相关工作超过 20 年的工程师,亲身经历或者亲眼目睹很多工程师对待开源软件的优秀实践,也看到了很多 Bad Cases,所以想把自己的一些心得体会写在这里,供工程师进行…

跨域冲突问题解决

1、问题分析 服务端和nginx代理 都做了跨域配置,导致请求头重复 headers 里面有两个重复的 Access-Control-Allow-Origin Access-Control-Allow-Methods Access-Control-Allow-Credentials 2、解决方法 在nginx去除服务端的跨域配置 proxy_hide_header Access-…

铁路关基保护新规:优先采购安全可信的网络产品和服务!

《征求意见稿》第十四条提到:运营者应当加强供应链安全保护,优先采购安全可信的网络产品和服务;采购网络产品和服务影响或者可能影响国家安全的,运营者应当预判网络产品和服务投入使用后可能带来的国家安全风险,按照国…

quarkus核心编程笔记

此篇只做总结,有大佬做的更详细 大佬quarkus笔记 依赖注入 在应用中,一个接口有多个实现是很常见的,那么依赖注入时,如果类型是接口,如何准确选择实现呢? 修饰符匹配Named注解属性匹配根据优先级选择写…

论文笔记--GloVe: Global Vectors for Word Representation

论文笔记--GloVe: Global Vectors for Word Representation 1. 文章简介2. 文章概括3 文章重点技术3.1 两种常用的单词向量训练方法3.2 GloVe3.3 模型的复杂度 4. 文章亮点5. 原文传送门6. References 1. 文章简介 标题:GloVe: Global Vectors for Word Representa…

自己实现MyBatis 底层机制--抽丝剥茧(上)

😀前言 本篇博文是学习过程中的笔记和对于MyBatis底层机制的分析思路,希望能够给您带来帮助😊 🏠个人主页:晨犀主页 🧑个人简介:大家好,我是晨犀,希望我的文章可以帮助到…

(树) 剑指 Offer 27. 二叉树的镜像 ——【Leetcode每日一题】

❓剑指 Offer 27. 二叉树的镜像 难度:简单 请完成一个函数,输入一个二叉树,该函数输出它的镜像。 例如输入: 4/ \2 7/ \ / \1 3 6 9镜像输出: 4/ \7 2/ \ / \9 6 3 1示例 1: 输…

28_计算机网络(Computer Networks)基础

本篇介绍计算机网络的基础知识。 文章目录 1. 计算机网络历史2. 以太网" (Ethernet)2.1 以太网" (Ethernet)的简单形式及概念2.2 指数退避解决冲突问题2.3 利用交换机减少同一载体中设备2.4 互联网(The Internet)2.5 路由(routing)2.6 数据包…

基于峰谷分时电价引导下的电动汽车充电负荷优化(matlab代码)

目录 1 主要内容 峰谷电价优化 电动汽车充电负荷变化 2 部分代码 3 程序结果 1 主要内容 该程序基本复现《基于峰谷分时电价引导下的电动汽车充电负荷优化》,代码主要做的是基于NSGA-II的电动汽车充电负荷优化,首先,在研究电动汽车用户充…

重生之我要学C++第五天

这篇文章主要内容是构造函数的初始化列表以及运算符重载在顺序表中的简单应用,运算符重载实现自定义类型的流插入流提取。希望对大家有所帮助,点赞收藏评论,支持一下吧! 目录 构造函数进阶理解 1.内置类型成员在参数列表中的定义 …

【云原生】Docker容器命令监控+Prometheus监控平台

目录 1.常用命令监控 docker ps docker top docker stats 2.weave scope 1.下载 2.安装 3.访问查询即可 3.Prometheus监控平台 1.部署数据收集器cadvisor 2.部署Prometheus 3.部署可视化平台Gragana 4.进入后台控制台 1.常用命令监控 docker ps [rootlocalhost ~…

重新审视MHA与Transformer

本文将基于PyTorch源码重新审视MultiheadAttention与Transformer。事实上,早在一年前博主就已经分别介绍了两者:各种注意力机制的PyTorch实现、从零开始手写一个Transformer,但当时的实现大部分是基于d2l教程的,这次将基于PyTorch…