87 lines
1.9 KiB
C++
Executable file
87 lines
1.9 KiB
C++
Executable file
/*
|
|
File: semaphore.H
|
|
|
|
Author: R. Bettati
|
|
Department of Computer Science
|
|
Texas A&M University
|
|
Date : 08/02/11
|
|
|
|
*/
|
|
|
|
#ifndef _semaphore_H_ // include file only once
|
|
#define _semaphore_H_
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
/* DEFINES */
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
/* -- (none) -- */
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
/* INCLUDES */
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
#include <pthread.h>
|
|
//#include <mutex>
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
/* DATA STRUCTURES */
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
/* -- (none) -- */
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
/* FORWARDS */
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
/* -- (none) -- */
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
/* CLASS S e m a p h o r e */
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
class Semaphore {
|
|
private:
|
|
/* -- INTERNAL DATA STRUCTURES
|
|
You may need to change them to fit your implementation. */
|
|
|
|
int value;
|
|
pthread_mutex_t m;
|
|
pthread_cond_t c;
|
|
|
|
public:
|
|
|
|
/* -- CONSTRUCTOR/DESTRUCTOR */
|
|
|
|
Semaphore(int _val){value = _val;}
|
|
|
|
~Semaphore(){}
|
|
|
|
/* -- SEMAPHORE OPERATIONS */
|
|
|
|
int P(){
|
|
//This is to lock the Semaphore.
|
|
pthread_mutex_lock( &m );
|
|
|
|
//Wait until condition, basically wait until signaled.
|
|
pthread_cond_wait( &c, &m );
|
|
|
|
//Some code here.
|
|
|
|
//Unlock the Semaphore.
|
|
pthread_mutex_unlock( &m );
|
|
}
|
|
//;
|
|
int V();
|
|
};
|
|
|
|
/*
|
|
class BoundBuffer{
|
|
Semaphore full(n);
|
|
Semaphore empty(n);
|
|
Semaphore mutex(n);
|
|
};
|
|
*/
|
|
#endif
|
|
|
|
|