欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

多线程Leetcode1116.打印零与奇偶数

程序员文章站 2024-02-28 13:17:16
...

多线程Leetcode1116.打印零与奇偶数

 

这道题目主要参考了Leetcode上一道题目Leetcode1115

运用互斥量mutex来解决:

class ZeroEvenOdd {
private:
    int n;
    mutex zeromx,oddmx,evenmx;
public:
    ZeroEvenOdd(int n) {
        this->n = n;
        oddmx.lock();
        evenmx.lock();
    }

    // printNumber(x) outputs "x", where x is an integer.
    void zero(function<void(int)> printNumber) {
        for(int i=1;i<=n;++i)
        {
           zeromx.lock();
           printNumber(0);
           if(i%2)
           {
               oddmx.unlock();
           }
           else
           {
               evenmx.unlock();
           }
        }
    }

    void even(function<void(int)> printNumber) {   //偶数
         for(int i=2;i<=n;i+=2)
         {
             evenmx.lock();
             printNumber(i);
             zeromx.unlock();
         }
    }

    void odd(function<void(int)> printNumber) {   //奇数
        for(int i=1;i<=n;i+=2)
        {
            oddmx.lock();
            printNumber(i);
            zeromx.unlock()
        }
    }
};

交替打印奇偶数的时候是通过

for循环 i+=2

要注意for循环条件:

0:      for(int i=1;i<=n;++i)

奇数: for(int i=1;i<=n;i+=2)

偶数: for(int i=2;i<=n;i+=2)