当前位置: 首页 > news >正文

c++写一个死锁并且自己解锁

刷算法题:

第一遍:1.看5分钟,没思路看题解

2.通过题解改进自己的解法,并且要写每行的注释以及自己的思路。

3.思考自己做到了题解的哪一步,下次怎么才能做对(总结方法)

4.整理到自己的自媒体平台。

5.再刷重复的类似的题目,根据时间和任务安排刷哪几个板块

6.用c++语言 都刷过一遍了 就刷中等

一.题目

c++写一个死锁并且自己解锁。

二、反思

1.死锁

#include<thread>
#include<mutex>using namespace std;mutex mutex1;
mutex mutex2;void thread1_deadlock(){lock_guard<mutex> lock1(mutex1);//创建的时候立即锁this_thread::sleepfor(chrono::milliseconds(100));lock_guard<mutex> lock2(mutex2);}void thread2_deadlock(){lock_guard<mutex> lock1(mutex2);this_thread::sleepfor(chrono::milliseconds(100));lock_guard<mutex> lock2(mutex1);
}int main(){thread t1(thread1_deadlock);thread t2(thread2_deadlock);t1.join();t2.join();return 0;
}

2.解锁

#include <iostream>
#include <thread>
#include <mutex>using namespace std;mutex mutex1;
mutex mutex2;void thread1_no_deadlock(){unique_lock<mutex> lock1(mutex1,defer_lock);//创建,但是先不锁unique_lock<mutex> lock2(mutex2,defer_lock);lock(lock1,lock2);//同时两个才能锁this_thread::sleep_for(chrono::seconds(1));}void thread2_no_deadlock(){unique_lock<mutex> lock1(mutex1,defer_lock);unique_lock<mutex> lock2(mutex2,defer_lock);lock(lock1,lock2);this_thread::sleep_for(chrono::seconds(1));
}int main(){thread t3(thread_no_deadlock);thread t4(thread_no_deadlock);t3.join();t4.join();return 0;
}

 3.思路的异同

三.进步的地方

相关文章:

c++写一个死锁并且自己解锁

刷算法题&#xff1a; 第一遍&#xff1a;1.看5分钟&#xff0c;没思路看题解 2.通过题解改进自己的解法&#xff0c;并且要写每行的注释以及自己的思路。 3.思考自己做到了题解的哪一步&#xff0c;下次怎么才能做对(总结方法) 4.整理到自己的自媒体平台。 5.再刷重复的类…...

JavaScript方法修改 input type=file 样式

html中的<input type "file">的样式很难修改&#xff0c;又跟页面风格很不匹配。我就尝试了几种方法&#xff0c;但是不管是用label还是用opacity:0都很麻烦&#xff0c;还老是出问题&#xff0c;所以最后还是用JavaScript来解决。 下面附上代码&#xff1a;…...

群控系统服务端开发模式-应用开发-前端个人信息功能

个人信息功能我把他分为了3部分&#xff1a;第一部分是展示登录者信息&#xff1b;第二步就是登录者登录退出信息&#xff1b;第三部分就是修改个人资料。 一、展示登录者信息 1、优先添加固定路由 在根目录下src文件夹下route文件夹下index.js文件中&#xff0c;添加如下代码 …...

【jupyter】文件路径的更改

使用过 jupyter notebook 环境的同行&#xff0c; 都体会过随机生成 .html 静态网页的过程&#xff0c; 虽然文档较小&#xff0c; 但是不堪反复使用积少成多。本文基于windows系统。 找到 runtime 目录 一般 jupyter 默认 runtime 在下述格式目录中 C:\Users\用户名\AppData…...

Ruby编程语言全景解析:从基础到进阶

Ruby是一种动态的、面向对象的编程语言&#xff0c;以其优雅的语法和强大的功能而闻名于世。自从1995年由日本程序员松本行弘&#xff08;Yukihiro Matsumoto&#xff09;发布以来&#xff0c;Ruby便迅速成为了开发者中颇受欢迎的编程语言之一。无论是构建简单的脚本还是复杂的…...

Elasticsearch 8.16:适用于生产的混合对话搜索和创新的向量数据量化,其性能优于乘积量化 (PQ)

作者&#xff1a;来自 Elastic Ranjana Devaji, Dana Juratoni Elasticsearch 8.16 引入了 BBQ&#xff08;Better Binary Quantization - 更好的二进制量化&#xff09;—— 一种压缩向量化数据的创新方法&#xff0c;其性能优于传统方法&#xff0c;例如乘积量化 (Product Qu…...

解决vscode不能像pycharm一样从其他同级文件夹导包

在vscode中选择&#xff1a;文件-首选项-设置-扩展-Python-settings.json 向setting.json添加如下代码: "terminal.integrated.env.osx": {"PYTHONPATH": "${workspaceFolder}/",},"terminal.integrated.env.linux": {"PYTHON…...

DAY24|回溯算法Part03|LeetCode:93.复原IP地址、78.子集、90.子集II

目录 LeetCode:93.复原IP地址 基本思路 C代码 LeetCode:78.子集 基本思路 C代码 LeetCode:90.子集II 基本思路 C代码 通过used实现去重 通过set实现去重 不使用used和set版本 LeetCode:93.复原IP地址 力扣代码链接 文字讲解&#xff1a;LeetCode:93.复原IP地…...

接口自动化测试做到什么程度的覆盖算是合格的

接口自动化测试的覆盖程度是一个衡量测试质量与效率的重要指标&#xff0c;其“好”的标准并非绝对&#xff0c;而是根据项目特性和团队需求动态调整的结果。然而&#xff0c;有几个原则和实践可以帮助我们确定一个相对合理的覆盖范围&#xff0c;以及为何这些覆盖是必要的。 1…...

Kubernetes-ArgoCD篇-01-简介

1、什么是Argo CD Argo CD 是针对 Kubernetes 的声明式 GitOps 持续交付工具。 Argo CD官方文档地址&#xff1a;https://argo-cd.readthedocs.io Argo CD源码地址&#xff1a;https://github.com/argoproj/argo-cd 1.1 关于Argo Argo是一个开源的项目&#xff0c;主要是扩…...

阿里云通义大模型团队开源Qwen2.5-Coder:AI编程新纪元

&#x1f680; 11月12日&#xff0c;阿里云通义大模型团队宣布开源通义千问代码模型全系列&#xff0c;共6款Qwen2.5-Coder模型。这些模型在同等尺寸下均取得了业界最佳效果&#xff0c;其中32B尺寸的旗舰代码模型在十余项基准评测中均取得开源最佳成绩&#xff0c;成为全球最强…...

【大数据学习 | HBASE高级】hbase的参数优化

Zookeeper 会话超时时间 属性&#xff1a;zookeeper.session.timeout 解释&#xff1a;默认值为 90000 毫秒&#xff08;90s&#xff09; hbase.client.pause&#xff08;默认值 100ms&#xff09;重试间隔 hbase.client.retries.number&#xff08;默认 15 次&#xff09;重试…...

两个链表求并集、交集、差集

两个链表求并集、交集、差集 两个链表求并集、交集、差集其实都是创建一个新链表然后遍历插入的题型&#xff0c;所以下边就举并集一个例子。 首先将l1里的所有节点遍历存储到新节点l中开始遍历l2,如果l中不存在l2中的节点就将其尾插到l中 下面是两个链表求并集、交集、差集的代…...

C++中的栈(Stack)和堆(Heap)

在C中&#xff0c;堆&#xff08;heap&#xff09;和栈&#xff08;stack&#xff09;是两种用于存储数据的内存区域。理解它们的原理和区别&#xff0c;对于优化代码性能和确保代码的安全性至关重要。以下是对C中堆栈的详细解析&#xff0c;包括它们的分配方式、优缺点、应用场…...

Linux系统编程学习 NO.11——进程的概念(2)

谈谈进程的性质 进程的竞争性 由于CPU资源是稀缺的,进程数量是众多的。不可避免需要造成进程排队等待CPU资源的动作&#xff0c;内核的设计者为了让操作系统合理的去调度这这些进程&#xff0c;就产生了进程优先级的概念。设置合理的进程优先级能让不同进程公平的去竞争CPU资…...

QT自定义控件封装

QT自定义控件封装 1.概述 这篇文章介绍如何创建UI文件&#xff0c;通过自定义方式将两个控件联动起来&#xff0c;实现自定义功能。 2.创建UI文件 新建一个widget的普通项目&#xff0c;然后在项目名称上右键选择And New... 新建文件&#xff0c;然后选择QT 再选择Qt Desig…...

【搜索结构】AVL树的学习与实现

目录 什么是AVL树 AVL树的定义 插入函数的实现 左单旋和右单旋 左右双旋与右左双旋 什么是AVL树 AVL树实际上就是二叉搜索树的一种变体&#xff0c;我们都知道二i叉搜索树可以将查找的时间复杂度提升到O(logn)&#xff0c;极大提升搜索效率。但是在极端情况下&#xff0c;当…...

LeetCode40:组合总和II

原题地址&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 题目描述 给定一个候选人编号的集合 candidates 和一个目标数 target &#xff0c;找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的每个数字在每个组合中只能使用 一次 。 注意&#xff…...

基于Python+Vue开发的旅游景区管理系统

项目简介 该项目是基于PythonVue开发的旅游景区管理系统&#xff08;前后端分离&#xff09;&#xff0c;这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Python编程技能&#xff0c;同时锻炼他们的项目设计与开发能力。通过学习基于Python的旅游景…...

嵌入式硬件杂谈(一)-推挽 开漏 高阻态 上拉电阻

引言&#xff1a;对于嵌入式硬件这个庞大的知识体系而言&#xff0c;太多离散的知识点很容易疏漏&#xff0c;因此对于这些容易忘记甚至不明白的知识点做成一个梳理&#xff0c;供大家参考以及学习&#xff0c;本文主要针对推挽、开漏、高阻态、上拉电阻这些知识点的学习。 目…...

1CMS网址导航 支持二级栏目分类 前台界面美观清爽 自适应

内容目录 一、详细介绍二、效果展示1.部分代码2.效果图展示 三、学习资料下载 一、详细介绍 一款基于1CMS制作的导航网站程序&#xff0c;提供简洁高效的上网导航体验。程序支持二级栏目分类&#xff0c;后台管理界面精简高效&#xff0c;前台界面美观清爽。 完善的栏目管理 …...

创业团队如何利用Taotoken统一技术栈并降低AI接入门槛

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 创业团队如何利用Taotoken统一技术栈并降低AI接入门槛 对于资源有限的创业团队而言&#xff0c;在产品中集成人工智能能力是提升竞…...

实测Taotoken在多模型调用下的延迟与稳定性体感

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 实测Taotoken在多模型调用下的延迟与稳定性体感 1. 引言 在集成多个大模型API到实际业务或开发工作流时&#xff0c;开发者通常需…...

宇视出入口相机抓拍调试速成方法

宇视出入口相机抓拍调试速成方法一、背景概述智慧园区、停车场等场景已普及宇视出入口抓拍相机&#xff0c;用于车辆出入管控与车牌识别。现场易受光照、车速、车道环境等影响&#xff0c;常出现漏抓、识别率低、画面模糊等问题。传统调试无标准、耗时长、上手门槛高&#xff0…...

Python核心基础

本文摘要&#xff1a;Python核心基础章节系统讲解了编程基础知识&#xff0c;主要包括&#xff1a;1.字面量的概念与写法&#xff0c;强调字符串必须使用引号包裹&#xff1b;2.变量与常量的定义与使用&#xff0c;介绍命名规则和三种命名风格&#xff1b;3.注释的两种形式&…...

别再死记硬背真值表了!用C++和Verilog代码实战,5分钟搞懂所有逻辑门

用代码实战解锁逻辑门&#xff1a;从C到Verilog的沉浸式学习 第一次接触数字逻辑时&#xff0c;那些密密麻麻的真值表总让人望而生畏。与其机械记忆&#xff0c;不如打开代码编辑器&#xff0c;让程序运行结果告诉你逻辑门的秘密。本文将带你用两种语言&#xff08;C和Verilog&…...

别再手动写RAM/ROM了!用Xilinx Block Memory Generator IP核的5个实战技巧(附Vivado仿真代码)

别再手动写RAM/ROM了&#xff01;用Xilinx Block Memory Generator IP核的5个实战技巧&#xff08;附Vivado仿真代码&#xff09; 在FPGA开发中&#xff0c;存储器模块的设计往往占据大量时间。许多工程师习惯手动编写RTL代码实现RAM/ROM功能&#xff0c;却忽略了Xilinx提供的B…...

三星固件下载全攻略:Bifrost跨平台工具的快速上手指南

三星固件下载全攻略&#xff1a;Bifrost跨平台工具的快速上手指南 【免费下载链接】Bifrost Cross-platform tool for downloading Samsung mobile device firmware. 项目地址: https://gitcode.com/gh_mirrors/sa/Bifrost 还在为三星设备刷机找不到官方固件而烦恼吗&am…...

「阅读」APP书源配置与管理完整指南:从新手到高级用户的实用教程

「阅读」APP书源配置与管理完整指南&#xff1a;从新手到高级用户的实用教程 【免费下载链接】Yuedu &#x1f4da;「阅读」自用书源分享 项目地址: https://gitcode.com/gh_mirrors/yu/Yuedu 「阅读」APP作为一款开源的小说阅读工具&#xff0c;其核心功能依赖于书源的…...

QMCDecode终极指南:三步解锁QQ音乐加密文件,让你的音乐自由播放

QMCDecode终极指南&#xff1a;三步解锁QQ音乐加密文件&#xff0c;让你的音乐自由播放 【免费下载链接】QMCDecode QQ音乐QMC格式转换为普通格式(qmcflac转flac&#xff0c;qmc0,qmc3转mp3, mflac,mflac0等转flac)&#xff0c;仅支持macOS&#xff0c;可自动识别到QQ音乐下载目…...