软考高级架构师;线程的同步和互斥、临界区、临界资源、信号量、PV 操作概念和例题

作者:明明如月学长, CSDN 博客专家,大厂高级 Java 工程师,《性能优化方法论》作者、《解锁大厂思维:剖析《阿里巴巴Java开发手册》》、《再学经典:《Effective Java》独家解析》专栏作者。

热门文章推荐

  • (1)《为什么很多人工作 3 年 却只有 1 年经验?》
  • (2)《一文掌握大模型提示词技巧:从战略到战术巧》
  • (3)《AI 时代,程序员的出路在何方?》
  • (4)《如何写出高质量的文章:从战略到战术》
  • (5)《我的技术学习方法论》
  • (6)《我的性能方法论》
  • (7)《AI 时代的学习方式: 和文档对话》

一、AI 讲解

在并发编程中,为了保证数据的一致性和完整性,需要使用特定的机制来控制多个线程对共享资源的访问。这里主要介绍几个相关的概念:线程的同步和互斥、临界区、临界资源、信号量、以及PV操作。

概念解释
线程的同步和互斥线程同步是指在多线程环境下,为了让线程之间能按照一定顺序执行,需要线程间进行协调,使得某个线程完成了必须的操作后,其他线程才能执行。互斥是同步的一种特殊情况,用来保证任一时刻只能有一个线程访问某个特定的资源。
临界区临界区是指一个访问共享资源的代码区域,这些共享资源一次只能由一个线程访问,否则会导致数据不一致的问题。
临界资源临界资源是指在并发编程中,多个线程或进程共同访问的资源,但是每次只能有一个线程或进程使用,以避免冲突。
信号量信号量是一种用于控制多个线程对共享资源访问的同步机制,可以简单理解为一个计数器,用来控制可以同时访问共享资源的最大线程数。信号量的值如果大于0,表示当前有资源可用;如果等于0,表示没有资源可用,线程必须等待。
PV操作PV操作是信号量操作中的两个基本操作,P操作(Proberen试图获取资源)和V操作(Verhogen释放资源)。P操作主要用于请求一个资源,会使信号量的值减1;V操作用于释放一个资源,会使信号量的值加1。

在这里插入图片描述

在这里插入图片描述

例如,在银行系统中,账户余额是一个临界资源,多个线线程(如转账操作)可能会同时操作同一个账户余额。为了避免错误(比如两个线程同时取款导致余额被错误计算),我们可以设定一个互斥锁(或信号量)来保证任一时刻只有一个线程可以操作账户余额,这样就可以通过线程同步和互斥机制来保证账户余额的正确性。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

二、AI 出题

(1)题目

  1. 在多线程程序中,为了防止多个线程同时修改同一份数据造成数据不一致的问题,应当使用:

    • A. 信号量
    • B. 临界区
    • C. 分布式数据库
    • D. 微服务架构
  2. 下列关于临界资源的说法正确的是:

    • A. 临界资源可以被多个线程同时访问
    • B. 临界资源一次只允许一个线程访问
    • C. 所有的资源都是临界资源
    • D. 临界资源的访问无需加锁
  3. P操作和V操作分别代表:

    • A. 增加资源和减少资源
    • B. 减少资源和增加资源
    • C. 请求资源和释放资源
    • D. 释放资源和请求资源
  4. 信号量的初值设定为1时,其作用是:

    • A. 允许一个线程同时访问
    • B. 允许两个线程同时访问
    • C. 不允许任何线程访问
    • D. 允许多个线程同时访问
  5. 以下哪项不是实现线程同步的机制?

    • A. 互斥量(Mutex)
    • B. 条件变量
    • C. 全局变量
    • D. 读写锁(RWLock)
  6. 临界区的主要作用是什么?

    • A. 增加程序的运行速度
    • B. 保护临界资源不被并发访问
    • C. 分配程序运行所需的资源
    • D. 提高CPU的利用率
  7. 信号量的PV操作中,当执行一次P操作后,信号量的值会怎样变化?

    • A. 增加1
    • B. 减少1
    • C. 不变
    • D. 先减少后增加
  8. 如果一个线程进入了临界区,这时候其他线程应该怎么做?

    • A. 立即进入临界区
    • B. 等待直到临界区被释放
    • C. 终止执行
    • D. 重新启动程序
  9. 使用互斥量(Mutex)的主要目的是:

    • A. 提高程序的执行效率
    • B. 防止数据竞争和保证数据的一致性
    • C. 分布式计算
    • D. 实现程序的并行计算
  10. 在使用信号量控制资源访问的情况下,如果一个线程完成了对资源的操作,它应该执行:

    • A. P操作
    • B. V操作
    • C. 无操作
    • D. 重启信号量

(2)答案和解析

  1. 答案:B。
    • 解析:临界区是一种用于多线程程序中防止数据不一致的机制,通过确保一次只有一个线

程能够访问共享数据,从而保护数据不被并发修改。

  1. 答案:B。

    • 解析:临界资源是指那些不能被多个线程同时访问的共享资源,以防数据不一致或冲突,因此B选项正确。
  2. 答案:C。

    • 解析:P操作(Proberen)意味着尝试获取资源,会将信号量减1,代表请求资源;V操作(Verhogen)意味着释放资源,会将信号量加1,代表释放资源。
  3. 答案:A。

    • 解析:当信号量的初值设定为1时,其作用是实现互斥,即一次只允许一个线程进入临界区访问共享资源。
  4. 答案:C。

    • 解析:全局变量本身并不能实现线程同步,反而如果不加以控制,全局变量的使用可能会引起数据不一致的问题。
  5. 答案:B。

    • 解析:临界区的主要作用是保护临界资源,确保在任一时刻,临界资源只被一个线程访问,从而避免并发访问导致的数据不一致问题。
  6. 答案:B。

    • 解析:P操作代表尝试获取一个资源,执行一次P操作后,信号量的值会减少1,表示已有一个线程占用了一个资源。
  7. 答案:B。

    • 解析:如果一个线程进入了临界区,其他线程必须等待直到临界区被释放,这是为了保证数据的一致性和完整性。
  8. 答案:B。

    • 解析:互斥量(Mutex)的主要目的是防止数据竞争,保证在任一时刻只有一个线程可以访问某个特定的资源,从而保证数据的一致性和完整性。
  9. 答案:B。

    • 解析:当线程完成了对资源的操作,它应该执行V操作来释放资源,增加信号量的值,表示资源现在可用,其他等待的线程可以尝试访问这个资源。

三、真题

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

信息系统项目管理师——第15章项目风险管理

本章节内容属于10大管理知识领域,选择、案例、论文都会考。 选择题,稳定考3分左右,新教材基本考课本原话,这个分不能丢。 案例题,本期考的概率中等。 论文题,202305刚考过,这期不会考。 1管理基…

基于SSM的“电费管理系统”的设计与实现(源码+数据库+文档+PPT)

基于SSM的“电费管理系统”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:SSM,VUE 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能结构图 系统登录页面 用户列表信息页面 添加用户信…

mkcert生成ssl证书+nginx部署局域网内的https服务访问问题

文章目录 mkcert生成ssl证书nginx部署局域网内的https服务访问问题1、下载mkcert查看自己的电脑是arm还是amd架构 2、安装mkcert3、测试mkcert是否安装成功4、查看CA证书存放位置5、打开windows的证书控制台6、生成自签证书,可供局域网内使用其他主机访问以下是nginx部署https服…

财富池指标公式--通达信免费指标公式源码合集--第二期

财富池免费通达信指标公式源码第二期来啦,今天给大家分享3个不同功能用法的指标,如果大家想要小编发布什么类型的指标,请多多在评论区留言呀! 一、通达信犀牛王指标公式 当在0轴线上出现蓝色加玫红色柱的信号时,是上涨…

LeetCode:331. 验证二叉树的前序序列化(模拟 Java)

目录 331. 验证二叉树的前序序列化 题目描述: 实现代码与解析: 模拟 原理思路: 331. 验证二叉树的前序序列化 题目描述: 序列化二叉树的一种方法是使用 前序遍历 。当我们遇到一个非空节点时,我们可以记录下这个节…

JAV八股--redis

如何保证Redis和数据库数据一致性 关于异步通知中消息队列和Canal的内容。 redisson实现的分布式锁的主从一致性 明天继续深入看这个系列问题 介绍IO复用模型

5个网络基础概念

说到网络,有五大基础概念是不得不提的,IP地址,子网掩码、网关、DHCP服务和PPPoE拨号,这些都是日常做电脑或路由器网络配置经常用到的,相信很多人都听过这些概念念,也知道都是一串串数字,但具体是…

远控桌面多任务并发文件保密传输

远程桌面文件传输是一个重要的功能,大多数远控都是用的桌面程序模式,利用系统自带复制粘贴拖拽文件拷贝功能,做一个ole调用对接,可以将很多控制权交给操作系统。 但我做的是浏览器版,浏览器是沙盒原理,为了…

指针的深入理解(五)

指针的深入理解(五) 文章目录 指针的深入理解(五)前言一.函数指针数组1.1函数指针的理解1.2函数指针的类型 二.转移表2.1转移表的概念2.2计算器2.3函数指针数组的应用 三.回调函数3.1回调函数的概念3.2回调函数的应用 四.指针知识…

力扣热题100_链表_142_环形链表 II

文章目录 题目链接解题思路解题代码 题目链接 142. 环形链表 II 给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中…

网络以太网之(1)基础概念

网络以太网之(1)基础概念 Author: Once Day Date: 2024年4月1日 一位热衷于Linux学习和开发的菜鸟,试图谱写一场冒险之旅,也许终点只是一场白日梦… 漫漫长路,有人对你微笑过嘛… 全系列文档可参考专栏:通信网络技术_Once-Day的…

NB-IOT——浅谈NB-IOT及模块测试

浅谈NB-IOT及模块基本使用测试 介绍什么是NB-IOT?NB-IOT的特点 使用准备基本使用 总结 介绍 什么是NB-IOT? NB-IoT,即窄带物联网(Narrowband Internet of Things),是一种低功耗广域物联网(LPW…

计算机网络——数据链路层(流量传输与可靠传输机制)

计算机网络——数据链路层(流量传输与可靠传输机制) 流量传输与可靠传输机制流量控制可靠传输机制 停止-等待协议无差错情况接收并检测到差错状态确认丢失或迟到状态 停等协议的效率分析后退N帧协议(Go-Back-N,简称GBN&#xff09…

在js中本地存储的数组如何转成对象

一、此方法仅适用一维数组; 二、效果图 使用后 三、js代码。 function gong(s){console.log(s);let data;let kk1;// 检查ask_id是否不为空 if (s.ask_id null ) { kk1}else{kk2let dd;dds.data;sessionStorage.setItem(wenda,JSON.stringify(dd[0]))window.l…

MyBatis主要的类层次结构(Mybatis工具类)

MyBatis主要的类层次结构 每一个MyBatis的应用程序都以一个SqlSessionFactory 对象的实例为核心 。 SqlSessionFactory对象的实例可以通过SqlSessionFactoryBuilder对象来获得 。 SqlSessionFactoryBuilder对象可以从 XML 配置文件中构建 SqlSessionFactory对象。 package…

Linux grep和find命令常用类型

1. grep命令的使用。 查找文件中符合条件的字符串或正则表达式,然后将含有范本样式的那一列显示出来。若不指定任何文件名称,或是给的文件名为-,则gerp命令会从标准输入设备读取数据。 用于测试的文件目录结构如下: 1.1 在单个文…

Vue项目登录页实现获取短信验证码的功能

之前我们写过不需要调后端接口就获取验证码的方法,具体看《无需后端接口,用原生js轻松实现验证码》这个文章。现在我们管理后台有个需求,就是登录页面需要获取验证码,用户可以输入验证码后进行登录。效果如下,当我点击获取验证码后能获取短信验证码: 这里在用户点击获取…

如何利用Geoserver将矢量数据发布成伪3D服务

目录 1.1、前言1.2、伪3D服务效果图1.3、数据准备1.4、基本原理1.5、完整的样式文件1.6、Geoserver中的操作 1.1、前言 本篇文章需要的Geoserver环境,Geoserver的情况请参考博文Geoserver简介、Geoserver安装部署操作请参考博文Geoserver安装部署、Geoserver基本操作…

初识CSS

目录 前言: CSS的介绍: CSS的发展: 1)CSS1.0: 2)CSS2.0: 3)CSS2.1: 4)CSS3: CSS特点: 1)丰富的样式定义: 2)易于设置和修改: 3&…

Datacom HCIP笔记-ISIS协议

IS中间系统(路由器/运行了ISIS协议的设备) ES终端系统(PC,PAD,print) 网络功能模型 ISO定义 事实标准 OSI TCP/IP 网络层(CLNP) (IS-IS) 网络…