1114. 按序打印
要按顺序打印,并且保证不会出现思索。
#include <semaphore.h>
class Foo {
protected:
sem_t firstJobDone;//两个信号量
sem_t secondJobDone;
public:
Foo() {
sem_init(&firstJobDone, 0, 0);//初始值为0
sem_init(&secondJobDone, 0, 0);
}
void first(function<void()> printFirst) {
// printFirst() outputs "first".
printFirst();//因为执行first不需要解锁,所以先执行
sem_post(&firstJobDone);//解锁
}
void second(function<void()> printSecond) {
sem_wait(&firstJobDone);//加锁
// printSecond() outputs "second".
printSecond();
sem_post(&secondJobDone);
}
void third(function<void()> printThird) {
sem_wait(&secondJobDone);
// printThird() outputs "third".
printThird();
}
};