#pragma once
#include "base_head.h"

#define CLOCK_ESTADO_BLOQUEADO		1
#define CLOCK_ESTADO_DESBLOQUEADO	0

class UTILES_EXPORT Clock//estructura para concurrencia
{
public:
	
	long t_sleep;//tiempo de sleep en milisegundos
	
	Clock(void);
	~Clock(void);

	void entro();//pilla el cerrojo durmiendo si es necesario
	void salgo();//libera el cerrojo
	BOOL puedo();//intenta pillar el cerrojo, si ya estaba pillado devuelve false si  no true

private:
	long volatile cerrojo;//variable volatile
	long cliente;//id del thred que tiene el cerrojo
	CRITICAL_SECTION cerrojo1;
	int modo;//indica si usa cerrojo 0 o 1



};
UTILES_EXPORT long lck_sum_atm(long *n,int i);//suma de manera atomica i a n