多线程Leetcode1116.打印零与奇偶数
程序员文章站
2024-02-28 13:17:16
...
这道题目主要参考了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)
上一篇: Python 含参构造函数实例详解
下一篇: redis源码--跳跃表