#include <unistd.h>
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#define N 1000000

typedef struct {
	double *tab;
	int n;
	double* (*f)(double*,int);
} args;

double* grootste(double* t,int n){
       double g=t[0];
       int index=0;
	for(int i=1;i<n;i++){
		if (t[i]>g){
			g=t[i];
			index=i;
		}
	}
	return &t[index];
}	

double* kleinste(double* t,int n){
       double k=t[0];
       int index=0;
	for(int i=1;i<n;i++){
		if (t[i]<k){
			k=t[i];
			index=i;
		}
	}
	return &t[index];
}	

void* worker(void* p){
	//worker
	args* a=(args*)p;
	return (void*) a->f(a->tab,a->n);   //return-type double*
}

int main(int argc, char **argv){
	double array[N];
	for(int i=0;i<N;i++){
		array[i]=i;
	}
	args argumenten[2];
	pthread_t threads[2];
	
	//threads aanmaken en starten
	for(int i=0;i<2;i++){
		argumenten[i].tab=array;
		argumenten[i].n=N;
		if (i==0){
			argumenten[i].f=kleinste;
		} else {
			argumenten[i].f=grootste;
		}
		pthread_create(&threads[i],NULL,worker,(void*)&argumenten[i]);
	}
	
	double *res[2];
	for(int i=0;i<2;i++){
		pthread_join(threads[i],(void**)&res[i]);
	}

	printf("kleinste=%lf grootste=%lf\n",*res[0],*res[1]);
	return 0;
}	
