Untitled
#include <iostream> #include <thread> #include <condition_variable> #include <queue> #include <cstdlib> #include <chrono> using namespace std; #define BUFFER_SIZE 10 queue<int> buffer; mutex mtx; condition_variable cv_empty; condition_variable cv_full; int produced_count = 0; int consumed_count = 0; int total_items = 0; void producer() { while (produced_count < total_items) { int item = rand() % 100; this_thread::sleep_for(chrono::seconds(1)); unique_lock<mutex> lock(mtx); cv_empty.wait(lock, []() { return buffer.size() < BUFFER_SIZE; }); buffer.push(item); produced_count++; cout << "Produced: " << item << endl; cv_full.notify_one(); } } void consumer() { while (consumed_count < total_items) { this_thread::sleep_for(chrono::seconds(1)); unique_lock<mutex> lock(mtx); cv_full.wait(lock, []() { return !buffer.empty(); }); int item = buffer.front(); buffer.pop(); consumed_count++; cout << "Consumed: " << item << endl; cv_empty.notify_one(); } } int main() { cout << "Enter the total number of items to produce and consume: "; cin >> total_items; thread prod_thread(producer); thread cons_thread(consumer); prod_thread.join(); cons_thread.join(); cout << "All items have been produced and consumed." << endl; return 0; }
Leave a Comment