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

三.进步的地方

相关推荐
lueluelue472 小时前
LeetCode:链表
算法·leetcode·链表
隐积3 小时前
3.1.7.Qt容器大家族(3):QVariant——万能盒子
开发语言·qt
橘子汽水1685 小时前
Leetcode 23,543合并K个升序链表,二叉树的直径
算法·leetcode·链表
huameinan狮子5 小时前
Adaboost算法原理与计算实例
算法
Tri_Function5 小时前
动态规划DP1(c++)
c++
别怪我很水5 小时前
API中提供了VelocityTracker类用于计算触摸事件MotionEvent的速度,而其内部默认使用的方法就是最小二乘法,本 ...
算法·gitee·最小二乘法
名字还没想好☜6 小时前
Next.js ‘use client‘ 到底加在哪:Server/Client Components 边界与常见报错
开发语言·前端·javascript·react·next.js
初级代码游戏7 小时前
iOS开发 Swift 速记1:变量和基本数据类型
开发语言·ios·swift
酷在前行7 小时前
【R生态】PERMANOVA 进阶实战:距离选择、PERMDISP、两两比较与受限置换(保姆级教程)
开发语言·r语言