信号量——多线程

信号量的本质就是一个计数器
在多线程访问临界资源的时候,如果临界资源中又有很多份分好的资源,那么就可以通过信号量来表示里面还有多少份资源,且每份资源只有一个线程可以访问

线程申请信号量成功,就一定有一份资源是你的:P操作
释放信号量:V操作
以此信号量就可以保护玲临界资源了。

环形变量基于信号量的互斥和同步
之前我们写的生产消费模型:两种线程访问的是一个整体临界资源,所以只允许一个线程进入临界区。通过锁来保护临界区,通过条件变量来实现合理的同步机制。

但是如果整体的临界区中又分为很多份资源,那么就允许同时多个线程访问这个整体,——并行,但是其中的每小份资源又只允许一个线程进来——互斥
——想要实现这样的功能就可以用信号量来维护。
在这里插入图片描述

基于信号量的互斥和同步

申请信号量也是原子的
和之前我们用锁+条件变量写的生产消费模型的不同:
1、之前的两种线程访问的都是一个整体的资源(阻塞队列)——所以把这个队列的操作用锁保护为临界区,而这里的是一个环形队列,里面又分为了很多小份,每份允许一个线程进入——所以要用两把锁,一把是保护正在生产的那一份资源,另一份保护的是正在消费的那一部分
2、有了信号量就不用考虑每次进入临界区是否有资源,只要进入就一定有资源,这样就可以不用条件变量的等待队列了。
当为满的时候,就会出现生产一个消费一个——同步(为空也一样)
在这里插入图片描述
在这里插入图片描述
注意:释放的是对方的信号量:
在这里插入图片描述
代码:
j基于线程的信号量

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

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

相关文章

Golang并发编程-协程goroutine的信道(channel)

文章目录 前言一、信道的定义与使用信道的声明信道的使用 二、信道的容量与长度三、缓冲信道与无缓冲信道缓冲信道无缓冲信道 四、信道的初体验信道关闭的广播机制 总结 前言 Goroutine的开发,当遇到生产者消费者场景的时候,离不开 channel(…

基于Matplotlib包实现可视化①——折线图绘制

Matplotlib 是一个用于创建静态、动画、 和交互式可视化的第三方库,也是我们在借助Python进行数据可视化时经常使用到的库,具有较强的可视化能力。 为让大家有一个更为直观的认识,这里我随机从其官方网页中摘取了几张图片。 按照惯例&#x…

【安装笔记-20240523-Windows-安装测试 ShareX】

安装笔记-系列文章目录 安装笔记-20240523-Windows-安装测试 ShareX 文章目录 安装笔记-系列文章目录安装笔记-20240523-Windows-安装测试 ShareX 前言一、软件介绍名称:ShareX主页官方介绍 二、安装步骤测试版本:16.1.0下载链接功能界面 三、应用场景屏…

2024年【危险化学品经营单位安全管理人员】考试及危险化学品经营单位安全管理人员考试资料

题库来源:安全生产模拟考试一点通公众号小程序 危险化学品经营单位安全管理人员考试考前必练!安全生产模拟考试一点通每个月更新危险化学品经营单位安全管理人员考试资料题目及答案!多做几遍,其实通过危险化学品经营单位安全管理…

强化学习4:DQN 算法

看这篇文章之前,建议先了解一下:Q-Learning 算法。 1. 算法介绍 DQN 算法全称为 Deep Q-Network,即深度Q网络。它将 Q-Learning 与 Deep Learning 结合在了一起。 1.1 Q-Network Q-Learning 是使用 Q-table 才存储决策信息的,…

【Python001】python批量下载、插入与读取Oracle中图片数据(已更新)

1.熟悉、梳理、总结数据分析实战中的python、oracle研发知识体系 2.欢迎点赞、关注、批评、指正,互三走起来,小手动起来! 文章目录 1.背景说明2.环境搭建2.1 参考链接2.2 `oracle`查询测试代码3.数据请求与插入3.1 `Oracle`建表语句3.2 `Python`代码实现3.3 效果示例4.问题链…

嵌入式实时操作系统笔记3:FreeRTOS移植(STM32F407)_编写简单的FreeRTOS任务例程

上文讲到UC/OS III系统的移植,那篇文章是失败了的,网络上的资料真是层次不清,多有遗漏步骤,导致单片机连操作系统的初始化都卡在那,这次换个赛道,学FreeRTOS吧...... 今日任务如标题所示:FreeR…

2024年【熔化焊接与热切割】考试内容及熔化焊接与热切割考试报名

题库来源:安全生产模拟考试一点通公众号小程序 熔化焊接与热切割考试内容考前必练!安全生产模拟考试一点通每个月更新熔化焊接与热切割考试报名题目及答案!多做几遍,其实通过熔化焊接与热切割复审模拟考试很简单。 1、【单选题】…

Android 配置 Kapt 编译器插件

以 Android Studio 2023.3.1 最新版本为准。 步骤1:打开版本信息配置文件 找到libs.versions.toml文件。 这是打开后的样子: 步骤2:配置版本信息 你需要在[plugins]下面添加一条kapt的配置信息: 要添加的配置信息如下: jetbr…

Boxy SVG for Mac:打造精致矢量图形的得力助手

在矢量图形设计领域,Boxy SVG for Mac以其出色的性能和丰富的功能,成为了设计师们的得力助手。 Boxy SVG for Mac(矢量图编辑器) v4.32.0免激活版下载 Boxy SVG具备强大的编辑能力,支持节点编辑、路径绘制、颜色填充等多种操作,让…

小浪助手下载学浪视频的简单步骤

你是否想轻松下载学浪高清视频?快来尝试小浪助手,这是你不可错过的下载神器!简单几步操作,即可轻松下载你所需的学浪视频,节省时间,提高效率! 首先我已经打包好了小浪助手,有需要的…

毫米波雷达模块在智能家居安全系统中的关键技术分析

随着智能技术的不断发展,智能家居已经成为了现代生活的一部分。而智能家居安全系统作为智能家居的重要组成部分,其功能不仅仅是对家庭进行监控和报警,更是通过各种感知技术对家庭安全进行全方位的保障。在智能家居安全系统中,毫米…

二叉树的遍历(前序遍历,中序遍历,后序,层序遍历)和一些简单操作(由浅入深绝对能看懂)

欢迎大佬们的关顾能给个赞就更好啦QWQ 目录 二叉树的逻辑结构与物理结构 一.二叉树的遍历 (1)二叉树的前序遍历 (2)二叉树的中序遍历 (3)二叉树的后序遍历 (4)二叉树的层序遍历…

Python 渗透测试:电子邮件 || Redis || FTP || SSH || MySQL 集成爆破工具.

集成爆破工具. 集合爆破里面包含了:电子邮件爆破工具,Redis爆破工具,FTP爆破工具,SSH爆破工具,MySQL爆破工具。 目录: 集合爆破工具. 电子邮件 爆破工具: Redis 爆破工具: FTP …

sqlserver 创建表,列及表,列描述

-- 创建表 CREATE TABLE Employees (EmployeeID INT PRIMARY KEY,EmployeeName NVARCHAR(100),EmployeeEmail NVARCHAR(100) );-- 为表添加描述 EXEC sp_addextendedproperty name NMS_Description, value N员工信息表, level0type NSchema, level0name dbo, level1type N…

数字图像处理冈塞雷斯第四版课后习题答案【英文原版】

第二章 第三章 . 第四章 傅里叶变换是一个线性过程,而计算梯度的平方根和平方根则是非线性运算。傅里叶变换可以用来计算微分的差值(如问题4.50),但必须在空间域中直接计算平方和平方根值。 (a)实际上,由于高通操作,环有一个暗中心…

基于MetaGPT构建LLM多智能体

前言 你好,我是GISer Liu,在上一篇文章中,我们用了两万多字详细拆解了单个Agent的组成,并通过Github Trending订阅智能体理解MetaGPT框架的订阅模块如何解决应用问题,但是对于复杂,并行的任务,单…

010-Linux磁盘介绍

文章目录 1、名词 2、类型 3、尺寸 4、接口/协议/总线 5、命名 6、分区方式 MBR分区 GPT分区 1、名词 磁盘是计算机主要的存储介质,可以存储大量的二进制数据,并且断电后也能保持数据不丢失。早期计算机使用的磁盘是软磁盘(Floppy D…

VBA技术资料MF157:创建每个标题的目录

我给VBA的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的工作效率,而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套,分为初级、中级、高级三大部分,教程是对VBA的系统讲解&#…