Skip to main content
Back to problems
#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)
LeetCode
solution.cpp
#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();
    }
  }
};