线程同步问题——锁

文章目录

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

线程同步

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

  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 记录用于将域…

Kafka 入门到起飞 - 生产者参数详解 ,什么是生产者确认机制? 什么是ISR? 什么是 OSR?

上回书我们讲了,生产者发送消息流程解析传送门 那么这篇我们来看下,生产者发送消息时几个重要的参数详解 ,什么是生产者确认机制? 什么是ISR? 什么是 OSR? 参数: bootstrap.servers : Kafka 集…

【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.…

Python的Selenium 3 和Selenium 4的写法区别

1.Python 版本问题: Selenium 3的话使用Python 3.6.5都可以继续编写,但是到了Selenium 4的时候,python 的版本需要 3.7 或 更高的版本。 2.差异: Selenium 4 移除了对旧协议的支持,并在引擎盖下默认使用 W3C WebDriver…

oracle_11g更改统计信息收集时间

1.获得当前自动收集统计信息的执行时间 col WINDOW_NAME for a20col REPEAT_INTERVAL for a80col DURATION for a30set linesize 1200SELECT t1.window_name, t1.repeat_interval, t1.duration,enabled FROM dba_scheduler_windows t1;WINDOW_NAME REPEAT_INTERVAL …

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…

Redis部署

一、redis hash tag 使用原因,出现错误 redis.exceptions.ResponseError: CROSSSLOT Keys in request dont hash to the same slot 在集群中,key会被划分到不同的槽中。不同的节点会拥有散列槽的一个子集。 多个key的操作、事务或者lua脚本调用多个k…

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…

ffmpeg 中 av_log 是怎样工作的?

---------------------------------------- author: hjjdebug date: 2023年 07月 27日 星期四 14:56:38 CST descriptor: ffmpeg 中 av_log 是怎样工作的? ---------------------------------------- av_log 功能其实只是添加了颜色,LOG级别,及log上下文名称,没有添加时间,函…

工程师是怎样对待开源

工程师如何对待开源 本文是笔者作为一个在知名科技企业内从事开源相关工作超过 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注解属性匹配根据优先级选择写…

gitlab api获取用户星标项目

获取所有项目 gitlab_url: gitlab的地址 token: 管理员账号的access_token https://gitlab_url/api/v4/projects/?private_tokentoken&page1&per_page20注:该链接只获取一页的数据,可通过循环累加page遍历所有项目获取某个用户的星标项目 参考…

论文笔记--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底层机制的分析思路,希望能够给您带来帮助😊 🏠个人主页:晨犀主页 🧑个人简介:大家好,我是晨犀,希望我的文章可以帮助到…