// Ejemplo Con Hilos: Suma, Resta, Multiplicación y División
// Gilberto Stankiewicz
// http://www.stan.com.mx
// ESCOM, 4CM4
// Febrero 2008
// gcc OperacionesHilos.c -l pthread

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

int resultados[4];

void* sumar(void* datos) {
	resultados[0] = ((int*)datos)[0] + ((int*)datos)[1];
	pthread_exit(NULL);
}

void* restar(void* datos) {
	resultados[1] = ((int*)datos)[0] - ((int*)datos)[1];
	pthread_exit(NULL);
}

void* multiplicar(void* datos) {
	resultados[2] = ((int*)datos)[0] * ((int*)datos)[1];
	pthread_exit(NULL);
}

void* dividir(void* datos) {
	resultados[3] = ((int*)datos)[0] / ((int*)datos)[1];
	pthread_exit(NULL);
}


int main(int argc, char *argv[]) {
	int i, datos[2];
	pthread_t ids[4];
	
	// parámetros
	if (argc >= 3) {
		datos[0] = atoi(argv[1]);
		datos[1] = atoi(argv[2]);
	}
	else {
		fprintf(stderr, "Error: faltan parametros.\n");
		fprintf(stderr, "Modo de empleo: %s INT INT\n", argv[0]);
	}
	

	// crear hilos
	pthread_create(&ids[0], NULL, (void*)sumar, datos);
	pthread_create(&ids[1], NULL, (void*)restar, datos);
	pthread_create(&ids[2], NULL, (void*)multiplicar, datos);
	pthread_create(&ids[3], NULL, (void*)dividir, datos);
	
	for (i = 0; i < 4; i++)
		pthread_join(ids[i], NULL);
		
	printf("sumar: %d \n", resultados[0]);
	printf("restar: %d \n", resultados[1]);
	printf("multiplicar: %d \n", resultados[2]);
	printf("dividir: %d \n", resultados[3]);
	
	// return 0; implícito en C99
}
