「并发编程 」

一、 为什么会有线程安全问题

1)程序和CPU间的协作关系

  • CPU组成
    • 寄存器
      • 存储了从内存加载的数据(从内存中将数据加载到 L1,L2,L3 缓存,再到寄存器) ;
      • 寄存器的运行速度比内存快好多个级别;
      • 所编写的程序在计算机底层转换为汇编语言后,主要操控对象是寄存器;
      • 按存储数据分类
        • 内存地址类寄存器
          • 程序计数器、基址寄存器,变址寄存器
        • 非内存地址寄存器
          • 累加寄存器,通用寄存器,标志寄存器

i ++ 问题:

多个线程同时使用i++指令的时候就可能会出现如下图的冲突,不同线程在执行的时候,各自的 eax 累加寄存器中的数值不相同,从而导致最终i被两次更新,但值却不是 2。

解决此类问题:只需要保证每个线程在执行i++ 指令的时候都是一个原子操作即可,例如通过加入一道屏障指令;
当线程 a 将变量读取到寄存器中,就给变量加一道屏障;

信号量

1)是什么:信号量其实是一种设计思想,它的本质可以理解为是一个整形的数字(sem),对于这个数字的访问,在具体实现上只提供两个原子操作

1)共享资源块是指被多个线程或进程共同访问和操作的一段代码或数据区域

2)原理(为什么)
p():prolaag 减少,又称为 wait 或 down 操作;主要作用是对信号量的计数器 -1(即 sem - 1 操作),如果计数器值为 0,则线程将被阻塞,后续的请求会被放置到一条等待队列中;当有请求抵达灵界区时,会触发 p 操作;
v():verhoog 增加,又称为signal操作或up操作;主要作用是对信号量的计数器进行 +1(即 sem + 1 操作),如果存在被阻塞的线程,则唤醒其中一个线程;
其中,计数器初始化值为信号量的初始资源数目;随着之前在临界区的访问处理结束后,就会触发一次 v 操作,然后从等待队列的队头通知一个之前处于等待状态的请求,让其进入临界区;

3)如何使用
1、多进程间任务执行的先后顺序
A 进程的 method_3 需要在 B 进程执行 method_2 后运行:保证在执行 A 进程 method_3 之前都执行 B 进程的 method_2 -> 执行 method_3 时需要借助 B 进程发起 V 操作;

2、多进程间任务的前驱关系

3、通过信号量实现访问次数限制

管程

  • 英文名字:monitor(监视器)
  • 对信号量的基础做一层封装;专用于访问一些共享变量的函数,使调用方使用起来更加简单和清晰;作用为一次只允许一个线程访问临界区,如果同时有多个访问,则将多余的访问挂起;
  • 作用:管程的提出 , 则是用在了语言的场景中,它主要是专门针对语言中的并发场景而设计的,从而简化了一些语言层面的实现逻辑。例如 Java 内部对于并发模块的实现 wait()、notify()、notifyAll() 这些函数就是采用了管程技术来控制的。
  • 组成
    • 一把锁:管程为了保证对于共享资源的访问一次只能有一个进程,所以引入了锁的机制,没有抢到锁的进程则需要进入到锁的等待队列进行等待;
    • 0 或多个条件变量:当进程获取到了锁的请求进入到临界区之后,有可能还需要做多个条件的判断,如果没有满足其中的某一条条件则需要进入到条件队列(条件队列位于临界区外)中,若后续条件满足,则由其他进程进行唤醒。
  • 什么临界区:临界区(Critical Section)是访问共享资源时的一段代码区域

管程模型实现生产者消费者模型

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

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

相关文章

中小企业选择CRM系统需要有哪些功能?

对于中小企业来说,选择一个合适的CRM系统是非常重要的,一款好用的CRM可以帮助企业提高业务效率,获得更多收益。那么,中小企业CRM系统的主要特点有哪些呢?下面我们从四个方面来说说。 1、功能: 功能是指CR…

试岗第一天问题

1、公司的一个项目拉下来 ,npm i 不管用显示 后面百度 使用了一个方法 虽然解决 但是在增加别的依赖不行,后面发现是node版本过高,更换node版本解决。 2、使用插件动态的使数字从0到100(vue-animate-number插件) 第一…

日常BUG——git提交代码报错

😜作 者:是江迪呀✒️本文关键词:日常BUG、BUG、问题分析☀️每日 一言 :存在错误说明你在进步! 一、问题描述 git 在提交代码时报错: Committing is not possible because you have unmerge…

QT 使用第三方库QtXlsx操作Excel表

1.简介 一直以来,都想学习一下C/C如何操作excel表,在网上调研了一下,觉得使用C/C去操作很麻烦,遂转向QT这边;QT有一个自带的类QAxObject,可以使用他去操作,但随着了解的深入,觉得他…

【力扣周赛】第 358 场周赛

文章目录 竞赛链接Q1:6939. 数组中的最大数对和竞赛时代码—— O ( n 2 ) O(n^2) O(n2)解法2——一次遍历 O ( n ) O(n) O(n),维护最大数位为 i 的元素的最大值 Q2:6914. 翻倍以链表形式表示的数字竞赛时代码——存入列表再计算解法2——只有…

R语言生存分析算法的简单组合

library(survival) library(randomForestSRC)# 生成模拟数据 set.seed(123) n <- 200 time <- rexp(n, rate 0.1) status <- rbinom(n, size 1, prob 0.7) var1 <- rnorm(n) var2 <- rnorm(n) var3 <- rnorm(n) data1 <- data.frame(time time, statu…

PLL 的 verilog 实现

锁相环&#xff08;PLL&#xff09;是一种常用的频率、相位追踪算法&#xff0c;在信号解调、交流并网等领域有着广泛的应用。本文对全数字锁相环的原理进行介绍&#xff0c;随后给出 verilog 实现及仿真。 PLL 锁相原理 锁相环结构如下图所示&#xff0c;主要由鉴相器、环路滤…

UDP通信实验、广播与组播、本地套接字

文章目录 流程函数应用广播应用 组播&#xff08;多播&#xff09;本地套接字应用 流程 函数 返回值&#xff1a; 成功&#xff0c;返回成功发送的数据长度 失败&#xff0c;-1 返回值&#xff1a; 成功&#xff0c;返回成功接收数据长度 失败&#xff0c;-1 应用 广播 应用 …

【不限于联想Y9000P电脑关盖再打开时黑屏的解决办法】

不限于联想Y9000P电脑关盖再打开时黑屏的解决办法 问题的前言问题的出现问题拟解决 问题的前言 事情发生在昨天&#xff0c;更新了Win11系统后&#xff1a; 最惹人注目的三处地方就是&#xff1a; 1.可以查看时间的秒数了&#xff1b; 2.右键展示的内容变窄了&#xff1b; 3.按…

湖南科技学院图书馆藏八一新书《乡村振兴战略下传统村落文化旅游设计》

湖南科技学院图书馆藏八一新书《乡村振兴战略下传统村落文化旅游设计》

20230815在淘宝的代扫描服务【仅供参考】

20230815在淘宝的代扫描服务【仅供参考】 2023/8/15 12:35 https://item.taobao.com/item.htm?spma21n57.1.0.0.3d47523caCFZ3T&id601206116790&ns1&abbucket4#detail e邦生活服务 https://item.taobao.com/item.htm?_ufju3ku42b4&id629900806906 寄书扫描…

奥威BI数据可视化工具:报表就是平台,随时自助分析

别的数据可视化工具&#xff0c;报表就只是报表&#xff0c;而奥威BI数据可视化工具&#xff0c;一张报表就约等于一个平台&#xff0c;可随时展开多维动态自助分析&#xff0c;按需分析&#xff0c;立得数据信息。 奥威BI是一款多维立体分析数据的数据可视化工具。它可以帮助…

JavaFx基础学习【五】:FXML布局文件使用

目录 前言 一、介绍 二、简单体验 三、FXML标签元素 四、fx属性介绍 五、重写initialize&#xff08;名字需要保持一致&#xff09;方法 六、Scene Builder快速布局 前言 如果你还没有看过前面的文章&#xff0c;可以通过以下链接快速前往学习&#xff1a; JavaFx基础学…

Vscode 常用操作教程

一、语言换成中文 这是我们可以直接点击左边栏第四个图标搜索插件 chinese ,也可以直接ctrlshiftp快捷键也会出来如图所示图标&#xff0c;出来chinese 插件之后选择安装install,安装完成之后重新ctrlshiftp会出现如图所示页面 找到我的鼠标在的地方对应的中文&#xff0c;此时…

2023国赛 高教社杯数学建模ABCDE题思路汇总分析

文章目录 0 赛题思路1 竞赛信息2 竞赛时间3 建模常见问题类型3.1 分类问题3.2 优化问题3.3 预测问题3.4 评价问题 4 建模资料 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 竞赛信息 全国大学生数学建模…

R语言实现随机生存森林(2)

library(survival) library(randomForestSRC) help(package"randomForestSRC") #构建普通的随机生存森林 data(cancer,package"survival") lung$status<-lung$status-1 rfsrc.fit1 <- rfsrc(Surv(time, status) ~ ., lung,ntree 100,block.size 1,…

react入门到实战 学习笔记1 搭建

一、React是什么 一个专注于构建用户界面的 JavaScript 库&#xff0c;和vue和angular并称前端三大框架 React有什么特点 1- 声明式UI&#xff08;JSX&#xff09; 写UI就和写普通的HTML一样&#xff0c;抛弃命令式的繁琐实现 2- 组件化 组件是react中最重要的内容&#xf…

开学季值得买电容笔有哪些?推荐平价好用的电容笔

大多数的学生党都没有稳定的经济来源&#xff0c;因此在挑选东西时都追求着高性价比。随着iPad平板电脑的性能不断提高&#xff0c;其所具备的功能将不断增加&#xff0c;它将逐渐融入我们的生活与工作。由于电子产品的不断升级&#xff0c;软件的改进&#xff0c;使得电容笔的…

DNS部署与安全详解(下)

文章目录 前言一、指定区域解析配置二、DNS服务器对外名称显示配置三、转发器使用配置四、配置辅助&#xff08;备份&#xff09;服务器五、如何让虚拟机可以真实上网六、为DNS服务器配置别名 前言 上一篇博客我们已经在Windows server2003的虚拟机上下载了DNS软件&#xff0c;…

企业中商业智能BI,常见的工具和技术

商业智能&#xff08;Business Intelligence&#xff0c;简称BI&#xff09;数据可视化是通过使用图表、图形和其他可视化工具来呈现和解释商业数据的过程。它旨在帮助组织更好地理解和分析他们的数据&#xff0c;从而做出更明智的商业决策。 常见的商业智能数据可视化工具和技…