-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Description
#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>
#include <random>
#include <queue>
using namespace std;
mutex mtx;
condition_variable cv;
random_device rd;
mt19937 gen(rd());
queue<int> dataQueue;
void publisher() {
uniform_int_distribution<> dis(1, 100);
for(int i=0;i<=100;i++){
this_thread::sleep_for(chrono::milliseconds(100));
int data = dis(gen);
lock_guard<mutex> lock(mtx);
dataQueue.push(data);
cv.notify_all();
}
}
void subscriber() {
for(int i=0;i<=100;i++){
unique_lock<mutex> lock(mtx);
cv.wait(lock, [] {return !dataQueue.empty();});
int data = dataQueue.front();
dataQueue.pop();
if (data % 2 == 0) {
cout << "Subscribe: " << data << endl;
}
}
}
int main() {
thread pub(publisher);
thread sub1(subscriber);
thread sub2(subscriber);
pub.join();
sub1.join();
sub2.join();
return 0;
}Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels