/∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ FILE: hellodump.c

∗ DESCRIPTION:

∗ A ”hello world” Pthreads program that dumps core. Figure out why and

∗ then fix it. ∗

∗ SOURCE: 9/98 Blaise Barney

∗ LAST REVISED: 10/8/99 Blaise Barney ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗/

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

#define NTHREADS 8 #define ARRAY SIZE 16000

void ∗Hello(void ∗threadid) {

double A[ARRAY SIZE]; int i; sleep(3); for (i=0; i<ARRAY SIZE; i++) {

A[i] = i ∗ 1.0; } printf("%d: Hello World! %f\n", threadid, A[ARRAY SIZE−1]); pthread exit(NULL);

}

int main(int argc, char ∗argv[]) {

pthread t threads[NTHREADS]; size t stacksize; pthread attr t attr; int rc, t; pthread attr init(&attr); pthread attr getstacksize (&attr, &stacksize);

printf("Thread stack size = %d bytes (hint, hint)\n",stacksize);

for(t=0;t<NTHREADS;t++){ rc = pthread create(&threads[t], NULL, Hello, (void ∗)t); if (rc){

      printf("ERROR; return code from pthread create() is %d\n", rc);

exit(−1); }

}

printf("Created %d threads.\n", t);

pthread exit(NULL); }

2