class ZeroEvenOdd {
private:
int n;
pthread_mutex_t mutexZero,mutexOdd,mutexEven;
public:
ZeroEvenOdd(int n) {
this->n = n;
pthread_mutex_init(&mutexZero,nullptr);
pthread_mutex_init(&mutexOdd,nullptr);
pthread_mutex_init(&mutexEven,nullptr);
pthread_mutex_lock(&mutexOdd);
pthread_mutex_lock(&mutexEven);
}
// printNumber(x) outputs "x", where x is an integer.
void zero(function<void(int)> printNumber) {
for(int i=1;i<=this->n;++i){
pthread_mutex_lock(&mutexZero);
printNumber(0);
if(i%2)
pthread_mutex_unlock(&mutexOdd);
else
pthread_mutex_unlock(&mutexEven);
}
}
void even(function<void(int)> printNumber) {
for(int i=2;i<=this->n;i+=2){
pthread_mutex_lock(&mutexEven);
printNumber(i);
pthread_mutex_unlock(&mutexZero);
}
}
void odd(function<void(int)> printNumber) {
for(int i=1;i<=this->n;i+=2){
pthread_mutex_lock(&mutexOdd);
printNumber(i);
pthread_mutex_unlock(&mutexZero);
}
}
};
1116. 打印零与奇偶数/C++
最新推荐文章于 2022-09-21 09:52:42 发布