Untitled
unknown
c_cpp
9 months ago
1.5 kB
4
Indexable
#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;
}Editor is loading...
Leave a Comment