思路:
保证A,B,C三个线程的顺序不会变,即优先级顺序的问题
A,B需要资源1,B,C需要资源2
A先占用资源1和资源2,A线程完了之后释放资源1不释放资源2,然后B线程占用资源1,A线程完了之后释放资源1和资源2,这时候 C线程可以占用资源2并进行
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();
}
};