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

三.进步的地方

相关推荐
iAkuya3 分钟前
(leetcode)力扣100 59括号生成(回溯||按括号序列的长度递归)
算法·leetcode·职场和发展
共享家95273 分钟前
双指针算法(一)
数据结构·算法·leetcode
十八岁讨厌编程4 分钟前
【算法训练营 · 二刷总结篇】回溯算法、动态规划部分
算法·动态规划
阿昭L5 分钟前
C++异常处理机制反汇编(二):32位下基本类型异常分析
c++·逆向工程
知识分享小能手6 分钟前
Oracle 19c入门学习教程,从入门到精通,VC++ + Oracle 实现汽配管理系统(21)
c++·学习·oracle
子木鑫6 分钟前
[SUCTF2019 & GXYCTF2019] 文件上传绕过实战:图片马 + .user.ini / .htaccess 构造 PHP 后门
android·开发语言·安全·php
近津薪荼6 分钟前
优选算法——滑动窗口2(数组模拟哈希表)
c++·学习·算法
挖矿大亨7 分钟前
C++中const修饰成员函数
开发语言·c++
洋九八9 分钟前
Hi3861 OpenHarmony 多线程操作、Timer 定时器、点灯、 IO 相关设备控制
开发语言·华为·harmonyos
金枪不摆鳍9 分钟前
算法基础-哈希表
算法·哈希算法