Leetcode刷题笔记题解(C++):1114. 按序打印(多线程)

思路:

保证A,B,C三个线程的顺序不会变,即优先级顺序的问题

A,B需要资源1,B,C需要资源2

A先占用资源1和资源2,A线程完了之后释放资源1不释放资源2,然后B线程占用资源1,A线程完了之后释放资源1和资源2,这时候 C线程可以占用资源2并进行

cpp 复制代码
class Foo {
    //声明2个互斥量
    mutex mtx1,mtx2;
public:
    Foo() {
        //在类的构造函数中对2个互斥量进行加锁
        mtx1.lock();
        mtx2.lock();
    }

    void first(function<void()> printFirst) {
        //线程A的优先级较高,不需要去获取资源就可以进行
        // printFirst() outputs "first". Do not change or remove this line.
        printFirst();
        //线程A打印完之后对资源1进行释放,下一步线程B进行调用
        mtx1.unlock();
    }

    void second(function<void()> printSecond) {
        //去获取资源1,所有在A线程还没释放的时候B线程就不会进行下去
        mtx1.lock();
        // printSecond() outputs "second". Do not change or remove this line.
        printSecond();
        //对资源1进行释放
        mtx1.unlock();
        //对资源2进行释放,下一步线程C进行调用
        mtx2.unlock();
    }

    void third(function<void()> printThird) {
        //去获取资源2,所有在B线程还没释放的时候C   线程就不会进行下去
        mtx2.lock();
        // printThird() outputs "third". Do not change or remove this line.
        printThird();
        //对资源2进行释放
        mtx2.unlock();
    }
};
相关推荐
im_AMBER2 分钟前
Leetcode 77 数组中的最大数对和 | 统计坏数对的数目
笔记·学习·算法·leetcode
代码游侠7 分钟前
学习笔记——Linux 进程管理笔记
linux·运维·笔记·学习·算法
逐辰十七11 分钟前
freertos学习笔记12--个人自用-第18章 资源管理(Resource Management)
笔记·学习
_OP_CHEN17 分钟前
【算法基础篇】(三十三)动态规划之区间 DP:从回文串到石子合并,吃透区间类问题的万能解法
c++·算法·蓝桥杯·动态规划·算法竞赛·acm/icpc·区间动态规划
眠晚晚17 分钟前
src挖洞笔记分享_上
服务器·网络·笔记
CoderYanger17 分钟前
贪心算法:8.买卖股票的最佳时机
java·算法·leetcode·贪心算法·1024程序员节
coderxiaohan23 分钟前
【C++】无序容器unordered_set和unordered_map的使用
开发语言·c++
Tisfy26 分钟前
LeetCode 3606.优惠券校验器:分类 + 排序
leetcode·题解·排序
德彪稳坐倒骑驴31 分钟前
SQL刷题笔记-我没做出来的题目
数据库·笔记·sql
lingggggaaaa31 分钟前
CS配合CrossC2插件,实现MacOS/Linux上线
linux·运维·笔记·安全·macos