#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>
const int max_count = 10;
int curr = 1;
std::mutex mtx;
std::condition_variable cv;
bool flag = true;
void print_odd() {
while (curr < max_count) {
std::unique_lock<std::mutex> lock(mtx);
if (!flag) {
cv.wait(lock);
}
std::cout << "Thread 1: " << curr++ << std::endl;
flag = false;
cv.notify_all();
}
}
void print_even() {
while (curr < max_count) {
std::unique_lock<std::mutex> lock(mtx);
if (flag) {
cv.wait(lock);
}
std::cout << "Thread 2: " << curr++ << std::endl;
flag = true;
cv.notify_all();
}
}
int main() {
std::thread t1(&print_odd), t2(&print_even);
t1.join();
t2.join();
return 0;
}