1#include <stdlib.h>
2#include <stdio.h>
3#include <pthread.h>
4#include <sched.h>
5#include <assert.h>
6
7static void *
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
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