美文网首页
C++ 1116 打印零与奇数

C++ 1116 打印零与奇数

作者: 蜗牛你慢慢来 | 来源:发表于2019-10-10 09:24 被阅读0次

一、题目描述

我们提供了一个类:

class ZeroEvenOdd {
  public ZeroEvenOdd(int n) { ... }      // 构造函数
  public void zero(printNumber) { ... }  // 仅打印出 0
  public void even(printNumber) { ... }  // 仅打印出 偶数
  public void odd(printNumber) { ... }   // 仅打印出 奇数
}

相同的一个 ZeroEvenOdd 类实例将会传递给三个不同的线程:

线程 A 将调用 zero(),它只输出 0 。
线程 B 将调用 even(),它只输出偶数。
线程 C 将调用 odd(),它只输出奇数。
每个线程都有一个 printNumber 方法来输出一个整数。请修改给出的代码以输出整数序列 010203040506... ,其中序列的长度必须为 2n。

示例 1:
输入:n = 2
输出:"0102"
说明:三条线程异步执行,其中一个调用 zero(),另一个线程调用 even(),最后一个线程调用odd()。正确的输出为 "0102"。

示例 2:
输入:n = 5
输出:"0102030405"

二、程序实例

class ZeroEvenOdd {
private:
    int n;
    pthread_mutex_t lockZero;
    pthread_mutex_t lockOdd;
    pthread_mutex_t lockEven;

public:
    ZeroEvenOdd(int n) {
        this->n = n;
        pthread_mutex_init(&lockZero, NULL);
        pthread_mutex_init(&lockOdd, NULL);
        pthread_mutex_init(&lockEven, NULL);
        pthread_mutex_lock(&lockOdd);
        pthread_mutex_lock(&lockEven);
    }

    // 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(&lockZero);
            printNumber(0);
            if(i%2){
                pthread_mutex_unlock(&lockOdd);
            }else{
                pthread_mutex_unlock(&lockEven);
            }
        }
    }

    void even(function<void(int)> printNumber) {
        for(int i = 2; i <= this->n; i += 2){
            pthread_mutex_lock(&lockEven);
            printNumber(i);
            pthread_mutex_unlock(&lockZero);
        }         
    }

    void odd(function<void(int)> printNumber) {
        for(int i = 1; i <= this->n ; i += 2){
            pthread_mutex_lock(&lockOdd);
            printNumber(i);
            pthread_mutex_unlock(&lockZero);
        }
    }
};

相关文章

  • C++ 1116 打印零与奇数

    一、题目描述 我们提供了一个类: 相同的一个 ZeroEvenOdd 类实例将会传递给三个不同的线程: 线程 A ...

  • 每周 ARTS 第 20 期

    1. Algorithm 1116. 打印零与奇偶数(中等) 描述: 有这样一个类 ZeroEvenOdd,相同的...

  • 1116. 打印零与奇偶数

  • 1116. 打印零与奇偶数

    题目: 现有函数 printNumber 可以用一个整数参数调用,并输出该整数到控制台。 例如,调用 printN...

  • leecode-1116:打印零与奇偶数

    题目描述 假设有这么一个类: 相同的一个 ZeroEvenOdd 类实例将会传递给三个不同的线程: 线程 A 将调...

  • 多线程:1116. 打印零与奇偶数

    1116. 打印零与奇偶数 假设有这么一个类: 相同的一个 ZeroEvenOdd 类实例将会传递给三个不同的线程...

  • 奇数之和 奇数之和 /打印1-100之间所有奇数之和///保存奇数之和// ...

  • [小白笔记]hp1020双面打印方法

    基本原理: 首先按奇数页正序打印,将打印出来的纸张翻转过来,再按偶数页逆序打印。若文档为奇数页,则翻转前先取出最上...

  • VideoWriter 写入 Size

    使用 C++ 语言或 Python 语言当我们使用奇数尺寸的 Size,写入的图像都为 偶数(奇数减一)

  • 一道线程面试题

    2个线程交替打印1-100内的数,线程A打印偶数,线程B打印奇数 打印结果如下: 实现代码

网友评论

      本文标题:C++ 1116 打印零与奇数

      本文链接:https://www.haomeiwen.com/subject/wxvhuctx.html