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

struct arguments {
  int *array;
  int size;
  int *sum;
};

void *do_work(void *arg);

int main(int argc, char **argv) {
  int array[100];
  int i,sum;
  pthread_t worker_thread;
  struct arguments *arg;
  
  arg = (struct arguments *)calloc(1, sizeof(struct arguments));
  arg->array = array; 
  arg->size=100; 
  arg->sum = &sum;

  for (i=0;i<100;i++) {
    array[i] = i;
  }

  if (pthread_create(&worker_thread, NULL, 
                     do_work, (void *)arg)) {
    fprintf(stderr,"Error while creating thread\n");
    exit(1);
  }

  fprintf(stdout,"Waiting for child thread to complete\n");

  if (pthread_join(worker_thread, NULL)) {
    fprintf(stderr,"Error while joining with child thread\n");
    exit(1);
  }

  fprintf(stdout,"Sum of the array: %d\n",sum);
  exit(0); 
}

void *do_work(void *arg) {
  struct arguments *argument;
  int i, size;
  int *array;
  int *sum;
 
  argument = (struct arguments*)arg;
  
  size = argument->size;
  array = argument->array;
  sum = argument->sum;
  
  *sum = 0;
  for (i=0;i<size;i++)
     *sum += array[i];  

  return NULL;
}

