1114. 按序打印
要按顺序打印,并且保证不会出现思索。
#include <semaphore.h>class Foo {protected:sem_t firstJobDone;//两个信号量sem_t secondJobDone;public:Foo() {sem_init(&firstJobDone, 0, 0);//初始值为0sem_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();}};
