互斥锁的概念,与部分接口

news2024/9/22 4:09:13

何为互斥

一种对共享数据的保护,防止多线程同时访问共享资源的时,数据混乱的问题。在互斥期间,保证执行流由并行改为串行。任何时刻,互斥保证有且只有一个执行流进入临界区,访问临界资源,通常对临界资源起保护作用 原子性(后面讨论如何实现):不会被任何调度机制打断的操作(有歧义,会被打断,但是无法影响对数据的访问),该操作只有两态,要么完成,要么未完成

加锁后,到解锁过程中,只允许一条执行流访问该区块代码,这就是我们所谓的原子性

互斥锁接口

锁类型名

pthread_mutex_t mtx //定义一个叫做mtx的锁

锁的声明方法(静/动态

//静态初始化锁
pthread_mutex_t mtx=PTHREAD_MUTEX_INITIALIZER

//动态初始化锁

int pthread_mutex_init(pthread_mutex_t * mutex, const pthread_mutexattr_t *attr);
//省略了restrict

在动态申请的初始化后,需要主动释放锁。

//对于动态申请的锁,在在最后需要手动释放锁
pthread_mutex_init(&mtx);
//。。。。

//不用该锁后
pthread_mutex_destroy(&mtx);

阻塞加锁int pthread_mutex_lock

int pthread_mutex_lock (pthread_mutex_t *__mutex);

如果该锁已经被其他执行流占用,或在竞争的时没有争到锁,线程将阻塞,等待占用锁的线程释放锁后再去争夺锁的使用。

非阻塞加锁int pthread_mutex_trylock

int pthread_mutex_trylock (pthread_mutex_t *__mutex)

尝试占用锁,在未占用锁时,不会进入阻塞状态,返回错误码后继续执行后续代码。可以根据是否返回0做if判断。

释放锁int pthread_mutex_unlock

int pthread_mutex_unlock (pthread_mutex_t *__mutex)

释放__mutex锁资源。

互斥锁底层逻辑

锁其实也是共享资源,也是被多个执行流所访问,那么怎么保护加锁和释放锁的原子操作

利用汇编中的指令:swap或exchange,这两条指令是将两个数据交换的,这种交换在汇编中只有一条语句,要么交换完成要么不交换,保证原子操作。

看看加锁的伪代码

先来看看lock加锁代码的逻辑。

 首先内存中锁保存了个资源1,线程1、2的上下文al都是被初始化为0的。

线程1先跑,调用lock函数,初始化al为0后交换数据 

然后立刻被切换到线程二

 然后线程二,走else被挂起

 切换会线程1,出if成立函数lock执行后续代码

在这期间,线程2一直被阻塞,直到线程1调用unlock函数,重新写入mutex为1,注意,在代码书写不当时,拥有A锁的线程再去申请A锁将自我阻塞死锁情况。

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

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

相关文章

苍穹外卖 day2 反向代理和负载均衡配置的代码

为什么要整这些玩意 为了并发,为了容错,为了高可用 一 反向代理的代码 server{listen 80;server_name localhost;location /api/{proxy_pass http://localhost:8080/admin/; #反向代理} }**proxy_pass:**该指令是用来设置代理服务器的地址&…

1小时学会Python

1.Hello world 安装完Python之后,打开IDLE(Python GUI) ,该程序是Python语言解释器,你写的语句能够立即运行。 我们写下一句著名的程序语句: 并按回车,你就能看到这句被K&R引入到程序世界的名言。 在解释器中选择"File"--"New Window" 或快捷键 …

如何通过振动判断设备健康度?以PreMaint设备数字化平台为例

在工业生产过程中,设备的健康状况直接关系到生产效率和安全。而振动分析作为一种重要的设备健康监测手段,可以通过监测设备的振动情况来判断其健康状况。本文将以PreMaint设备数字化平台为例,探讨如何通过振动分析来判断设备的健康度&#xf…

【javaweb】学习日记Day3 - Ajax 前后端分离开发 入门

目录 一、Ajax 1、简介 2、Axios (没懂 暂留) (1)请求方式别名 (2)发送get请求 (3)发送post请求 (4)案例 二、前端工程化 1、Vue项目-目录结构 2、…

IDEA中使用Docker插件构建镜像并推送至私服Harbor

一、开启Docker服务器的远程访问 1.1 开启2375远程访问 默认的dokcer是不支持远程访问的,需要加点配置,开启Docker的远程访问 # 首先查看docker配置文件所在位置 systemctl status docker# 会输出如下内容: ● docker.service - Docker Ap…

如何使用PHP实现多语言网站功能

如何使用PHP实现多语言网站功能 在全球化的今天,开发多语言网站成为了一个必要的需求。PHP作为一种常用的编程语言,可以很方便地实现多语言网站功能。本文将介绍如何使用PHP实现多语言网站功能,并提供相应的代码示例。 一、创建语言文件 首先…

系统集成项目管理工程师【中级】考证学习资料整理分享——第一章《信息化基础知识》,持续更新中........

系统集成项目管理工程师(中级)考证学习资料整理分享,持续更新中........ 第一章 《信息化基础知识》 一、信息与信息化 在充满前所未有的创新活力的同时,信息化正以更快地速度推进生产力的发展,围绕智能制造、云计算、网络空间、移动互联、工业互联、大数据、信息安全等领…

网络安全—黑客—自学笔记

想自学网络安全(黑客技术)首先你得了解什么是网络安全!什么是黑客! 网络安全可以基于攻击和防御视角来分类,我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术,而“蓝队”、“安全运营”、“安全…

多线程与高并发编程一

文章目录 一、故事背景二、知识点主要构成1、线程的概念2、启动方式2.1、继承Thread类 重写run方法2.2、实现Runnable接口 重写run方法2.3、实现Callable 重写call方法 配合FuterTask获取线程结果 3、常用方法start()方法:run()方法:sleep(long millis)方…

【HCIP】企业网三层架构实验

题目: 拓扑图 配置 LSW1 //链路聚合 [lsw3]interface Eth-Trunk 1 [lsw3-Eth-Trunk1]trunkport GigabitEthernet 0/0/3 0/0/4 [lsw3-Eth-Trunk1]q [lsw3]vlan batch 1 2 [lsw3]interface Eth-Trunk 1 [lsw3-Eth-Trunk1]port link-type trunk [lsw3-Eth-Trunk1]port…

docker中bridge、host、container、none四种网络模式简介

一.bridge模式 1.简介 2.演示 (1)运行两个容器,不指定网络模式情况下默认是bridge模式 (2)在主机中自动生成了两个veth设备 (3)查看两个容器的IP地址 (4)可以自定义…

基于图卷积网络的知识嵌入8.21

基于图卷积网络的知识嵌入 摘要介绍 摘要 近年来,围绕图卷积网络(GCN)这一主题出现了大量的文献。如何有效地利用复杂图中丰富的结构信息(例如具有heterogeneous types of entities and relations(异构实体和关系类型) 的知识图谱…

深入理解ForkJoin

任务类型 线程池执行的任务可以分为两种:CPU密集型任务和IO密集型任务。在实际的业务场景中,我们需要根据任务的类型来选择对应的策略,最终达到充分并合理地使用CPU和内存等资源,最大限度地提高程序性能的目的。 CPU密集型任务 …

【快速解决方案】浏览器的安全策略不允许通过 file:// 协议直接加载外部文件(最省事的方法)

目录 问题摘要 解决办法 检验结果 问题摘要 Failed to load resource: net::ERR_FILE_NOT_FOUND🌈 Cute Code Editor 🌈.html:162 Fetch API cannot load file:///D:/%E6%A1%8C%E9%9D%A2/%E4%B8%83%E5%A4%95%E5%BF%AB%E4%B9%90/index.txt. URL scheme …

RK3399平台开发系列讲解(内核调试篇)内核中内存泄漏的调试

🚀返回专栏总目录 文章目录 一、Linux 内核内存泄漏二、如何观测内核内存泄漏?三、kmemleak 工具沉淀、分享、成长,让自己和他人都能有所收获!😄 📢 内核内存泄漏往往都会是很严重的问题,那么,我们该如何判断内存泄漏是否是内核导致的呢? 一、Linux 内核内存泄漏 …

003-Nacos 2.1.x 注册实例源码分析

目录 Nacos 2.1.X注册实例入口接口流程Client 注册 事件处理 服务订阅入口 Nacos 2.1.X 注册实例 入口 com.alibaba.nacos.naming.remote.rpc.handler.InstanceRequestHandler#handleService service Service.newService(request.getNamespace(), request.getGroupName(), r…

计算机网络————IP数据报的首部各字段详解(很重要)

目录 1. IP数据报的介绍2. 首部的固定部分的各字段说明2.1 Version(版本)2.2 IHL(首部长度)2.3 Type of service(区分服务)2.4 Total Length(总长度)2.5 Identification(…

企业级即时通讯协作和移动应用管理平台哪个品牌好?

在竞争激烈的商业环境下,高效的企业通讯和协作变得至关重要。WorkPlus作为领先的品牌,专注于提供企业级即时通讯协作和移动应用管理平台。本文将介绍WorkPlus如何成为企业实现协同工作、高效沟通和流程管理的理想解决方案。 一、全面协作加速工作流程&am…

二、1.保护模式

访问外部硬件有两个方式: 将某个外设的内存映射到一定范围的地址空间中, CPU 通过地址总线访问该内存区域时会落到外设 的内存中,这种映射让 CPU 访问外设的内存就如同访问主板上的物理内存一样外设是通过 IO 接口与 CPU 通信的,…

BDA初级分析——民宿投资决策影响因素分析

实战作业: 民宿投资决策影响因素分析如今,出门旅行住民宿已经不是一个新鲜话题,而且民宿品牌也是层出不穷.作为一名旅行服务业的数据分析师,我们以Airbnb北京的民宿为例,对其进行数据分析,探索什么类型的民宿价格更高?…