#1195
Medium Concurrency Fizz buzz multithreaded
Concurrency
74.7% acceptance
Jan 13, 2026
673
440
Four threads call fizz(), buzz(), fizzbuzz(), and number() to print the FizzBuzz sequence.
Solution
C++
Time O(n)
Space O(1)
#include <mutex>
#include <condition_variable>
#include <functional>
using namespace std;
class FizzBuzz {
int n;
int curr = 1;
mutex mtx;
condition_variable cv;
public:
FizzBuzz(int n) : n(n) {}
void fizz(function<void()> printFizz) {
while (true) {
unique_lock<mutex> lock(mtx);
cv.wait(lock, [this]{ return curr > n || (curr % 3 == 0 && curr % 5 != 0); });
if (curr > n) return;
printFizz();
curr++;
cv.notify_all();
}
}
void buzz(function<void()> printBuzz) {
while (true) {
unique_lock<mutex> lock(mtx);
cv.wait(lock, [this]{ return curr > n || (curr % 5 == 0 && curr % 3 != 0); });
if (curr > n) return;
printBuzz();
curr++;
cv.notify_all();
}
}
void fizzbuzz(function<void()> printFizzBuzz) {
while (true) {
unique_lock<mutex> lock(mtx);
cv.wait(lock, [this]{ return curr > n || (curr % 3 == 0 && curr % 5 == 0); });
if (curr > n) return;
printFizzBuzz();
curr++;
cv.notify_all();
}
}
void number(function<void(int)> printNumber) {
while (true) {
unique_lock<mutex> lock(mtx);
cv.wait(lock, [this]{ return curr > n || (curr % 3 != 0 && curr % 5 != 0); });
if (curr > n) return;
printNumber(curr);
curr++;
cv.notify_all();
}
}
};