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

#define DIM 2000
#define N 1

typedef struct {
	int startrij;
	void (*f)(int);
} args;

int A[DIM][DIM];
int B[DIM][DIM];
int C[DIM][DIM];

void print_matrix(int (*m)[DIM]){
	for(int i=0;i<DIM;i++){
		for(int j=0;j<DIM;j++){
			printf("%d ",m[i][j]);
		}
		printf("\n");
	}
}

void multiply(int startrij){
	for(int i=startrij;i<DIM;i+=N){
		for(int j=0;j<DIM;j++){
			int som=0;
			for(int k=0;k<DIM;k++){
				som+=A[i][k]*B[k][j];
			}
			C[i][j]=som;
		}
	}
}

void* worker(void *p){
	args *a=(args*)p;
	a->f(a->startrij);
	return NULL;
}	

int main(int argc,char **argv){
	for(int i=0;i<DIM;i++){
		for(int j=0;j<DIM;j++){
			A[i][j]=i+j;    
			B[i][j]=i+j;
		}
	}
	pthread_t threads[N];
	args argumenten[N];
	for(int i=0;i<N;i++){
		argumenten[i].startrij=i;
		argumenten[i].f=multiply;
		pthread_create(&threads[i],NULL,worker,(void*)&argumenten[i]);
	} 
	for(int i=0;i<N;i++){
		pthread_join(threads[i],NULL);
	}
	//print_matrix(C);
	return 0;
}
