死锁的产生

news2024/11/15 15:53:34

        死锁的产生:有一个公共区的玩具,A和B想玩,但是A先得到了玩具,A玩完玩具之后又去干别的事情,但是并没有把玩具还回去,此时B就玩不到了玩具,在无限期的等待。

        如下图所示:

        线程1把num资源给占用,线程2一直没办法获得num,线程2用于卡住了,与此同时,主线程的合流无法执行 

第二中情况:

        如果有一套玩具:比如鼓和敲鼓的锤子,A获得了鼓,B获得了锤,但是他们俩都不想放弃自己手里的玩具。A和B都永远玩不了敲鼓,在无限期等待。这也是一种死锁的情况。

如下图所示:

注意:这里的资源a和b各对应一把锁。

代码如下: 

#include<iostream>
#include<thread>
#include<mutex>
#include<windows.h>

using namespace std;

void thread1();
void thread2();

mutex mx1;//鼓的锁
mutex mx2;//鼓槌的锁
int a;
int b;
int main(void)
{
	thread t1(thread1);
	thread t2(thread2);
	t1.join();
	t2.join();
	return 0;
}

void thread1()
{
	cout << "thread1 is running" << endl;
	lock_guard<mutex> guard1(mx1);
	cout << "thread1's num is " << a << endl;//拿到了鼓
	Sleep(1000);//过了1秒反应过来还需要鼓槌
	lock_guard<mutex> guard2(mx2);
	cout << "get b" << " b = " << b << endl;
	cout << "1 : a + b = " << a + b << endl;

}

void thread2()
{
	cout << "thread2 is running" << endl;
	lock_guard<mutex> guard2(mx2);//拿到了鼓槌
	cout << "thread2's num is " << b << endl;
	Sleep(1000);//过了1秒反应过来还需要鼓槌
	lock_guard<mutex> guard1(mx1);
	cout << "get a" << " a = " << a << endl;
	cout << "2 : a + b = " << a + b << endl;
}

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

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

相关文章

php压缩一个文件夹,php下载多个图片

$area_id 100;$area_name 一百;shell_exec("cd /www/wwwroot/api/public/images/ && zip -r " . $area_name . ".zip " . $area_id . "/"); 把 100/ 这个文件夹&#xff0c;压缩成 一百.zip 然后得到zip所在的下载url 这个功能&…

百度编辑器(Ueditor)视频上传到阿里云 + 预览不支持FLASH问题解决 + 输入框不展示视频播放页面问题解决

目前需求方提出的问题是以下四个&#xff1a; 1.百度编辑器&#xff08;Ueditor&#xff09;视频上传到阿里云 2.解决不支持FLASH问题 3.视频上传后可以预览 4.修改视频封面 看一下原始的功能是什么样的 上传视频&#xff1a; 视频上传完成 上传视频保存的路径&#xff1…

使用vant组件库

参考网址 Vant Weapp - 轻量、可靠的小程序 UI 组件库 1.在小程序中右键打开外部终端窗口 2.npm init -y 生成package.json 如果没有npm指令则需安装node.js 地址&#xff1a;https://nodejs.org/dist/v18.16.1/node-v18.16.1-x64.msi 3.npm i vant/weapp1.3.3 -S --pro…

PHP 论坛系统mysql数据库web结构apache计算机软件工程网页wamp

一、源码特点 PHP 论坛系统 是一套完善的web设计系统&#xff0c;对理解php编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为PHP APACHE&#xff0c;数据库为 mysql5.0&#xff0c;使用php语言开发。 下载链接…

oracle服务器的CPU占用率一直100%排查方式

背景说明 公司开发、测试、演示环境&#xff0c;三个环境的oracle服务器无论服务器是否空闲&#xff0c; CPU的占用率一直是100%&#xff0c; 一直也没有找到问题原因&#xff0c;今天就花了一整天时间研究这个问题。 通过AWR报告查看oracle运行情况 awr报告是oracle 10g下提…

一种人体属性识别的网络结构

0、前言 人体属性识别&#xff0c;是一个典型的多标签分类场景。每个人体有多个标签&#xff0c;如年龄、性别、衣着颜色等&#xff0c;而每个属性又有多种类别&#xff0c;如年龄分儿童青年老人、性别分男女、颜色分红绿青蓝紫... 本文提供了一个网络结构来执行这种任务。 …

【KVM】命令行安装kvm

命令行安装kvm 一、准备镜像文件 mkdir /home/iso cd /home/iso rz ls CentOS-7-x86_64-Minimal-2009.iso二、使用命令行安装虚拟机 virt-install --virt-typekvm --nameKVM_01 --vcpus4 --memory6000 --location/opt/CentOS-7-x86_64-Minimal-2009.iso --disk path/data/kv…

2021年全国硕士研究生入学统一考试管理类专业学位联考数学试题——纯题目版

2021 年 1 月份管综初数真题 一、问题求解&#xff08;本大题共 5 小题&#xff0c;每小题 3 分&#xff0c;共 45 分&#xff09;下列每题给出 5 个选项中&#xff0c;只有一个是符合要求的&#xff0c;请在答题卡上将所选择的字母涂黑。 1.某便利店第一天售出50种商品&…

联邦学习中的模型聚合

目录 联邦学习中的模型聚合 1.client-server 算法 2. fully decentralized(完全去中心化)算法 联邦学习中的模型聚合 在联邦学习的情景下引入了多任务学习&#xff0c;其采用的手段是使每个client/task节点的训练数据分布不同&#xff0c;从而使各任务节点学习到不同的模型…

[python] 进度条使用

from tqdm import tqdm# 创建一个示例字典 my_dict {a: 1, b: 2, c: 3}# 使用tqdm遍历字典的键 for key in tqdm(my_dict.keys()):# 在这里编写你的代码# 这部分代码将会在进度条中显示pass# 使用tqdm遍历字典的值 for value in tqdm(my_dict.values()):# 在这里编写你的代码#…

查看 git的 config 配置

git config --list // 查看全部配置信息git config user.name // 查看指定配置信息 查看某一个配置信息 git config --global user.email 参考 如何查看gitconfig配置_笔记大全_设计学院

牛客BM21 旋转数组的最小数字

描述 有一个长度为 n 的非降序数组&#xff0c;比如[1,2,3,4,5]&#xff0c;将它进行旋转&#xff0c;即把一个数组最开始的若干个元素搬到数组的末尾&#xff0c;变成一个旋转数组&#xff0c;比如变成了[3,4,5,1,2]&#xff0c;或者[4,5,1,2,3]这样的。请问&#xff0c;给定…

IDEA远程DeBug调试

1. 介绍 当我们在开发过程中遇到一些复杂的问题或需要对代码进行调试时&#xff0c;远程调试是一种非常有用的工具。使用 IntelliJ IDEA 进行远程调试可以让你在远程服务器上的应用程序中设置断点、查看变量和执行调试操作。 远程调试的好处如下&#xff1a; 提供更方便的调试…

大众汽车车载娱乐系统曝安全漏洞,可被远程控制

根据GitHub的一份报告&#xff0c;大众汽车Discover Media信息娱乐系统的漏洞是在2023年2月28日发现的。 该漏洞可能会使未打补丁的系统遭到拒绝服务&#xff08;DoS&#xff09;攻击。该漏洞起初是由大众汽车的用户发现的&#xff0c;随后大众汽车方面确认了该漏洞&#xff0…

Golang 一个支持错误堆栈, 错误码, 错误链的工具库

介绍 来腾讯之后主要使用go, 在业务开发中需要一个支持错误码对外返回, 堆栈打印等能力的错误工具库, 先开始使用pkg/errors, 但该项目已经只读, 上次更新是几年前, 而且有一些点比如调整堆栈深度等没有支持, 后续根据业务的需要抽取了一个通用库, 且做了一些优化, 详见下方. …

Apikit 自学日记:发起文档测试-RPC

以DUBBO接口为例&#xff0c;进入某个DUBBO协议的API文档详情页&#xff0c;点击文档上方 测试 标签&#xff0c;即可进入 API 测试页&#xff0c;系统会根据API文档的定义的请求报文自动生成测试界面并且填充测试数据。 对RPC/DUBBO接口发起测试 填写请求报文参数值 此测试D…

Spring(8) Springboot自动配置原理

目录 1.背景2.SpringBootApplication 注解3.三大注解4.EnableAutoConfiguration 注解5.spring.factories6.示例&#xff1a;RedisAutoConfiguration 类 1.背景 Springboot 的自动配置原理&#xff0c;是Springboot中最高频的一道面试题&#xff0c;也是Springboot框架最核心的…

react antd 样式修改

最近在做一个大数据的大屏ui更改&#xff0c;使用的是antd&#xff0c;需要根据ui稿调很多的antd组件样式 特做一个样式修改记录&#xff0c;也给需要的人一些帮助 我们修改的有以下样式&#xff1a; 如何改呢&#xff1a; /*修改 antd 组件样式 */// 仅 drop 下的下拉框改变样…

Linux Host is not allowed to connect to this MySQL server解决方法

先说说这个错误&#xff0c;其实就是我们的MySQL不允许远程登录&#xff0c;所以远程登录失败了&#xff0c;解决方法如下&#xff1a; 在装有MySQL的机器上登录MySQL mysql -u root -p密码 执行use mysql; 执行update user set host % where user root;这一句执行完可能会报…

PoseiSwap IDO、IEO 结束,即将登录 BNB Chain

PoseiSwap 是 Nautilus Chain 上的首个 DEX&#xff0c;其正在基于模块化 Layer3 架构底层&#xff0c;以及Nautilus Chain 所提供的 ZKP 来构建属于自己的 Rollup 应用层&#xff0c;并以订单簿作为交易模型&#xff0c;这为其向更多的功能进行拓展提供了早期基础。