/*! \file  psema.h
\brief Inclusion des sémaphores
*/

#ifndef _SEMA_H
#define _SEMA_H
#include "phil.h"



/*! \ingroup Gpsema
\brief Descripteur du sémaphore


Un sémaphore est décrit par un compteur et une file d'attente. La valeur initiale du compteur doit  être >= 0


\htmlonly <hr WIDTH="100%"> \endhtmlonly 
\htmlonly <hr WIDTH="100%"> \endhtmlonly 
\b Implantation
 Le compteur représente le nombre de jetons si le compteur est >=0 et le nombre de threads en attente s'il est <0.   

*/
typedef struct PhilSemaphore
{ 
	volatile int counter;		/*!< compteur de jeton */
	PhilMutex lock;/*!< verrou d'exclusion mutuelle */
	PhilCond queue;/*!< queue des threads en attente */
} PhilSemaphore;

 


extern    int     PhilSemaphoreInit(PhilSemaphore * s, int i );
extern     int     PhilSemaphoreDestroy(PhilSemaphore * s);
extern int            PhilSemaphoreP( PhilSemaphore * s );
extern int          PhilSemaphoreV( PhilSemaphore  *s );

#endif
