leetcode线程题1116——打印零与奇偶数

简介: leetcode线程题1116——打印零与奇偶数

直接考虑信号量解决问题。

输出完奇数偶数,释放输出0所需的信号量。

对于本题没有想到的地方是调用过程,原代码编写的没有自己加入for循环,以为三个线程会不停被调用。

一直不过,只输出“01”就结束了,根本没有循环起来。

#include <semaphore.h>
class ZeroEvenOdd {
private:
    int n;
    sem_t printOdd, printEven, numDone;
public:
    ZeroEvenOdd(int n) {
        this->n = n;
        sem_init(&printOdd, 0, 0);
        sem_init(&printEven, 0, 0);
        sem_init(&numDone, 0, 1);
    }
    // printNumber(x) outputs "x", where x is an integer.
    void zero(function<void(int)> printNumber) {
        for (int i = 1; i <= n; ++i) {
            sem_wait(&numDone);
            printNumber(0);
            if (i % 2 == 0) {
                sem_post(&printEven);
            } else {
                sem_post(&printOdd);
            }
        }
    }
    void even(function<void(int)> printNumber) {
        for (int i = 2; i <= n; i += 2) {
            sem_wait(&printEven);
            printNumber(i);
            sem_post(&numDone);
        }       
    }
    void odd(function<void(int)> printNumber) {
        for (int i = 1; i <=n; i += 2) {
            sem_wait(&printOdd);
            printNumber(i);
            sem_post(&numDone);
        }
    }
};
相关文章
|
2月前
|
人工智能 算法 测试技术
map|动态规划|单调栈|LeetCode975:奇偶跳
map|动态规划|单调栈|LeetCode975:奇偶跳
|
9月前
【Leetcode -1609.奇偶树 -1122.数组的相对排序】
【Leetcode -1609.奇偶树 -1122.数组的相对排序】
31 0
|
9月前
|
算法 索引
【Leetcode -328.奇偶链表 - 725.分隔链表】
【Leetcode -328.奇偶链表 - 725.分隔链表】
24 0
|
2月前
|
索引
每日一题:力扣328. 奇偶链表
每日一题:力扣328. 奇偶链表
20 4
|
2月前
|
算法 C++
【刷题】Leetcode 1609.奇偶树
这道题是我目前做过最难的题,虽然没有一遍做出来,但是参考大佬的代码,慢慢啃的感觉的真的很好。刷题继续!!!!!!
18 0
|
9月前
【LeetCode】1609. 奇偶树、1122. 数组的相对排序
1609. 奇偶树 1609. 奇偶树 题目描述:
35 0
|
2月前
|
人工智能 算法 测试技术
map|动态规划|单调栈|LeetCode975:奇偶跳
map|动态规划|单调栈|LeetCode975:奇偶跳
|
2月前
leetcode-1609:奇偶树
leetcode-1609:奇偶树
22 0
|
2月前
|
算法
leetcode-328:奇偶链表
leetcode-328:奇偶链表
31 0
|
JavaScript 前端开发 索引
leetcode.328奇偶链表——Javascript实现方案
leetcode.328奇偶链表——Javascript实现方案
70 0