1 #include <stdlib.h> 2 #include <stdio.h> 3 #include <pthread.h> 4 #include <sched.h> 5 #include <assert.h> 6 7 static void * func(void * p)8func (void *p) 9 { 10 int *counter = (int *) p; 11 unsigned i; 12 enum { numarrays = 100, numels = 17 }; 13 char *arrays [numarrays]; 14 15 for (i=0; i<numarrays; i++) 16 { 17 (*counter) ++; 18 unsigned x = i % numels; 19 arrays[i] = calloc (numels, sizeof(arrays[i][0])); 20 assert (arrays[i] != NULL); 21 arrays[i][x] = i; 22 free (arrays[i]); 23 sched_yield (); /* sleep (1); */ 24 } 25 26 return (NULL); 27 } 28 29 main()30int main () 31 { 32 int rc; 33 unsigned i; 34 enum foo { NT=10 }; 35 pthread_t threads[NT]; 36 int counts[NT]; 37 38 39 for (i=0; i<NT; i++) 40 { 41 counts[i] = 0; 42 rc = pthread_create (& threads[i], NULL, func, (void *) & counts[i]); 43 if (rc) abort(); 44 } 45 46 for (i=0; i<NT; i++) 47 { 48 rc = pthread_join (threads[i], NULL); 49 if (rc) abort(); 50 printf ("%d%s", counts[i], (i==NT-1) ? "\n" : " "); 51 } 52 53 return 0; 54 } 55 /* { dg-output "100 100 100 100 100 100 100 100 100 100" } */ 56 /* { dg-repetitions 20 } */ 57 /* { dg-timeout 10 } */ 58