Skip to content

徐梦博 #6

Description

@yifan030
#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;
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions