题目
编写一个可以从 1 到 n 输出代表这个数字的字符串的程序,但是:
如果这个数字可以被 3 整除,输出 "fizz"。
如果这个数字可以被 5 整除,输出 "buzz"。
如果这个数字可以同时被 3 和 5 整除,输出 "fizzbuzz"。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/fizz-buzz-multithreaded
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
#ifndef T0916_3_FIZZBUZZ_H
#define T0916_3_FIZZBUZZ_H
#include <mutex>
#include <condition_variable>
using std::mutex;
using std::condition_variable;
#include <functional>
using std::function;
using std::unique_lock;
class FizzBuzz {
private:
int n;
mutex mut;
condition_variable cv;
int num;
public:
FizzBuzz(int n){
this->n=n;
num=1;
}
void fizz(function<void()>printFizz ){
for(;num<=n;){
unique_lock<mutex> lck(mut);
cv.wait(lck,[this]{return (num%3==0)&&(num%5!=0);});
printFizz();
num++;
cv.notify_all();
}
}
void buzz(function<void()>printBuzz){
for(;num<=n;){
unique_lock<mutex>lck(mut);
cv.wait(lck,[this]{return (num%3!=0)&&(num%5==0);});
printBuzz();
num++;
cv.notify_all();
}
}
void fizzbuzz(function<void()> printFizzBuzz){
for(;num<=n;){
unique_lock<mutex>lck(mut);
cv.wait(lck,[this]{return (num%3==0)&&(num%5==0);});
num++;
cv.notify_all();
}
}
void number(function<void(int)>printNumber){
for(;num<=n;){
unique_lock<mutex>lck(mut);
cv.wait(lck,[this]{return (num %3!=0)&&(num%5!=0);});
printNumber(num);
num++;
cv.notify_all();
}
}
};
#endif
copy以下作者,补充引用库