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

刷算法题:

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

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

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

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

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

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

一.题目

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

二、反思

1.死锁

cpp 复制代码
#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.解锁

cpp 复制代码
#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.思路的异同

三.进步的地方

相关推荐
晴空了无痕6 分钟前
从 Go 基础到 K8s:一条可落地的 Go 服务端成长路线
开发语言·后端·golang·kubernetes
神明不懂浪漫8 分钟前
【第五章】Java中的继承与多态
java·开发语言
神州世通1 小时前
解密企业通信安全防线:Avaya Aura 三层安全架构深度解析
开发语言·php
AC赳赳老秦2 小时前
企业工商公开信息采集分析:OpenClaw 批量查询企业工商信息,生成企业画像报告
大数据·开发语言·python·自动化·php·deepseek·openclaw
qq_2518364572 小时前
基于java Web 动漫视频网站毕业论文
java·开发语言·前端
野生风长2 小时前
C++入门基础:从命名空间到引用与指针的全面解析
开发语言·c++
来一碗刘肉面3 小时前
栈的应用(表达式求值)
数据结构·算法
FoldWinCard3 小时前
D6 Python 基础语法 --- 保留关键字
开发语言·python
xiaowang1234shs3 小时前
怪兽轻断食技术深度测评:从断食计时引擎到AI识别算法的工程实践解析
数据库·人工智能·算法·macos·机器学习·p2p·visual studio
小果因子实验室4 小时前
量化研究--策略迁移算法1研究
算法