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.思路的异同

三.进步的地方

相关推荐
开心比对错重要1 分钟前
leetcode69.x 的平方根
数据结构·算法·leetcode
美狐美颜sdk10 分钟前
什么是美颜SDK?从几何变换到深度学习驱动的美颜算法详解
人工智能·深度学习·算法·美颜sdk·第三方美颜sdk·视频美颜sdk·美颜api
香精煎鱼香翅捞饭14 分钟前
java通用自研接口限流组件
java·开发语言
m0_4615026923 分钟前
【贪心算法1】
算法·贪心算法
-凌凌漆-23 分钟前
【C#】async与await介绍
开发语言·c#
小猿_0034 分钟前
C语言单链表头插法
c语言·开发语言
Doopny@38 分钟前
数字组合(信息学奥赛一本通-1291)
数据结构·算法·动态规划
Hello.Reader43 分钟前
在 Rust 中实现面向对象的状态模式
开发语言·rust·状态模式
JouJz1 小时前
Java虚拟机之垃圾收集(一)
java·开发语言·jvm
五行星辰1 小时前
Java链接redis
java·开发语言·redis