/* 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 //#include /*--------------------------------------------------------------------------*/ /* 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