2024每日刷题(181)
Leetcode—1116. 打印零与奇偶数
C++实现代码
class ZeroEvenOdd {
private:
int n;
sem_t zeroSem;
sem_t evenSem;
sem_t oddSem;
public:
ZeroEvenOdd(int n) {
this->n = n;
sem_init(&zeroSem, 0, 1);
sem_init(&evenSem, 0, 0);
sem_init(&oddSem, 0, 0);
}
~ZeroEvenOdd() {
sem_destroy(&zeroSem);
sem_destroy(&evenSem);
sem_destroy(&oddSem);
}
// printNumber(x) outputs "x", where x is an integer.
void zero(function<void(int)> printNumber) {
for(int i = 1; i <= n; i++) {
sem_wait(&zeroSem);
printNumber(0);
sem_post(&(i % 2 == 1 ? oddSem: evenSem));
}
}
void even(function<void(int)> printNumber) {
for(int i = 2; i <= n; i += 2) {
sem_wait(&evenSem);
printNumber(i);
sem_post(&zeroSem);
}
}
void odd(function<void(int)> printNumber) {
for(int i = 1; i <= n; i += 2) {
sem_wait(&oddSem);
printNumber(i);
sem_post(&zeroSem);
}
}
};
运行结果
之后我会持续更新,如果喜欢我的文章,请记得一键三连哦,点赞关注收藏,你的每一个赞每一份关注每一次收藏都将是我前进路上的无限动力 !!!↖(▔▽▔)↗感谢支持!