Tuesday, April 11, 2017

C++ code for solving Producer-Consumer problem using sleep and wake up calls

This is the solution for Producer-Consumer problem using sleep and wake up calls
#include <iostream>
#include <stdlib.h>
#include <fstream>
#include <time.h>
#include <conio.h>
#define N 100
using namespace std;

int arr[N];
int arrLength = 0,counter = 0;

class doTrade
{
public:
    doTrade()
    {
        myFile.open("text.txt");
        conState = true;
        proState = true;
    }
    void consumer();
    void producer();
private:
    ofstream myFile;
    bool conState,proState;
};
void doTrade::producer()
{
    // Producer goes to sleep
     if(arrLength == N-1)
     {
         if(proState == true)
            myFile << "producer goes to sleep  [P S]" << endl;
         proState = false;
     }
     else
     {
          if(proState == true){
            myFile << "producer produces [P]" << endl;
            arr[arrLength] = 1;
            arrLength ++ ;
            counter++;
          }
        else
             myFile << "producer can't produce because it is asleep  [P C]" << endl;
     }
     //waking up consumer
     if(arrLength == 1)
     {
        if(conState == false){
            myFile << "producer wakes up [P W]" << endl;
            conState = true;
        }
     }
}
void doTrade::consumer()
{
    //consumer goes to sleep
    if(arrLength == 0)
    {
        if(conState == true){
        myFile << "COnsumer goes to sleep  [C S]"<<endl;
        conState = false;
        }
    }
    else
    {
        if(conState == true){
            myFile << "Consumer consumes [C ]" << endl;
            arr[arrLength] = 2;
            arrLength--;
            counter--;
        }
        else
            myFile << "consumer can't consume beacuse it is asleep.  [C C]" << endl;

    }
    //consumer cant wake up producer so once producer is asleep both will sleep forever
}
int main()
{
    srand(time(NULL));
    doTrade p1;
    double i = 0;
    int a;
    while(i <= 15000)
    {
        a = rand()%2;
        if(a)
            p1.consumer();
        else
            p1.producer();
        i++;
    }
    return 0;
}

No comments:

Post a Comment