This commit is contained in:
shadow8t4 2015-11-10 15:56:32 -06:00
parent feb712cfee
commit 4a988cc171
2 changed files with 70 additions and 0 deletions

25
BoundedBuffer.cpp Normal file
View file

@ -0,0 +1,25 @@
#include "semaphore.h"
#include "BoundedBuffer.h"
#include <string>
#include <vector>
void BoundedBuffer::push(string item){
empty->P();
mutex->P();
data.push_back(item);
mutex->V();
full->V();//increment the number of full slots now.
}
string BoundedBuffer::pop(){
string item = data.back();
full->P();
mutex->P();
data.pop_back();
mutex->V();
empty->V();
return item;
}

45
BoundedBuffer.h Normal file
View file

@ -0,0 +1,45 @@
#ifndef _BoundedBuffer_H_
#define _BoundedBuffer_H_
#include <vector>
#include <string>
//#include <semaphore.h>
using namespace std;
//extern unsigned int n, b, w;
class BoundedBuffer{
int b_val;
Semaphore *full = new Semaphore(0); //initialized to 0, Since there are 0 full slots
Semaphore *empty;// = new Semaphore(b); //initialized to b, Since all the slots are empty
Semaphore *mutex = new Semaphore(1);
vector<string> data;
public:
BoundedBuffer(){empty = new Semaphore(100);}//default b value
BoundedBuffer(int b){
b_val = b;
empty = new Semaphore(b_val);
}
int get_val(){return b_val;}
void set_b(int b){ b_val = b;}
void push(string item);
string pop();
//can't be larger than b strings
//b = user input
};
#endif