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();
    }
};
相关推荐
Keep Running *1 小时前
Spring Cloud Alibaba_学习笔记
笔记·学习
小白菜又菜2 小时前
Leetcode 2075. Decode the Slanted Ciphertext
算法·leetcode·职场和发展
我不是懒洋洋2 小时前
AI的影响6
笔记
史迪仔01123 小时前
[QML] QML IMage图像处理
开发语言·前端·javascript·c++·qt
会编程的土豆4 小时前
【数据结构与算法】再次全面了解LCS底层
开发语言·数据结构·c++·算法
低频电磁之道4 小时前
解决 Windows C++ DLL 导出类不可见的编译错误
c++·windows
咖啡忍者4 小时前
【SAP CO】4.COPC产品成本控制-3.WIP后台配置
笔记
君义_noip5 小时前
信息学奥赛一本通 4150:【GESP2509七级】⾦币收集 | 洛谷 P14078 [GESP202509 七级] 金币收集
c++·算法·gesp·信息学奥赛·csp-s
Ricky_Theseus6 小时前
静态链接与动态链接
c++
摸个小yu6 小时前
【力扣LeetCode热题h100】链表、二叉树
算法·leetcode·链表