Producer Consumer

#include <cstdlib>
#include <iostream>
#include <mutex>
#include <thread>
#include <chrono>
using namespace std;
std::mutex g_mutex;
bool g_ready = false;
int g_data = 0;
int produceData() {
int randomNumber = rand() % 1000;
std::cout << "produce data: " << randomNumber << "\n";
return randomNumber;
}
void consumeData(int data) { std::cout << "receive data: " << data << "\n"; }
// consumer thread function
void consumer() {
while (true) {
while (!g_ready) {
// sleep for 1 second
std::this_thread::sleep_for (std::chrono::seconds(1));
}
std::unique_lock<std::mutex> ul(g_mutex);
consumeData(g_data);
g_ready = false;
}
}
// producer thread function
void producer() {
while (true) {
std::unique_lock<std::mutex> ul(g_mutex);
g_data = produceData();
g_ready = true;
ul.unlock();
while (g_ready) {
// sleep for 1 second
std::this_thread::sleep_for (std::chrono::seconds(1));
}
}
}
void consumerThread() { consumer(); }
void producerThread() { producer(); }
int main() {
std::thread t1(consumerThread);
std::thread t2(producerThread);
t1.join();
t2.join();
return 0;
}

Post a Comment

1 Comments

  1. // C++ program to demonstrate working of regex_match()
    #include
    #include

    using namespace std;
    int main()

    { cout<<"enter string"<>a;

    regex b("(a*abb*)");

    if ( regex_match(a, b) )
    cout << "String 'a' matches regular expression 'b' \n";


    if ( regex_match(a.begin(), a.end(), b) )
    { cout << "String 'a' matches with regular expression " "'b' in the range from 0 to string end\n"; }
    else {
    cout << "String 'a' DONOT matches with regular expression " "'b' in the range from 0 to string end\n";
    }


    return 0;
    }

    ReplyDelete

If you have any doubts/suggestion/any query or want to improve this article, you can comment down below and let me know. Will reply to you soon.