#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
#include <string.h>

/*Carles Pina i Estany  -  carles@pinux.info
 * Febrer 2004*/

/*Exemple de mutex entre dos fils*/

typedef struct estructura_ {
	pthread_mutex_t mutex;
	int valor;
} estructura;

estructura data={PTHREAD_MUTEX_INITIALIZER,0};

int prova;
extern int errno;

void *codi (void *arg) {
	int error=0;
	sleep(1);

	for (;;) {
		error=pthread_mutex_lock(&(data.mutex));
		//veure diferència entre _lock i _trylock
		printf("Error ha retornat: %d\n",error);
		printf("Error ha retornat: %s\n",strerror(error));

		
		printf("La dada val: %d\n",data.valor);
		pthread_mutex_unlock(&(data.mutex));
	}
	
	return (NULL);
}

void *codi2 (void *arg) {
	for (;;) {
		printf("Ara el bloquejaré\n");
		pthread_mutex_lock(&(data.mutex));
		data.valor++;
		sleep(1);
		printf("Ara el desbloquejaré\n");
		pthread_mutex_unlock(&(data.mutex));
		sleep(1);
	}
	
	return (NULL);
}


int main () {
	pthread_t thread;
	prova=2;

	
	/*data.mutex=PTHREAD_MUTEX_INITIALIZER;
	data.valor=5;*/

	pthread_create(&thread,NULL,&codi,NULL);
	pthread_create(&thread,NULL,&codi2,NULL);

	sleep(10);
	printf("Fi!\n");
	return(0);

}
