1 #include <pthread.h>
2 #include <stdlib.h>
3 #include <stdio.h>
4 
5 const int N = 1000;
6 void *x[N];
7 
Thread1(void * unused)8 void *Thread1(void *unused) {
9   for (int i = 0; i < N; i++) {
10     fprintf(stderr, "%s %d\n", __func__, i);
11     free(x[i]);
12   }
13   return NULL;
14 }
15 
Thread2(void * unused)16 void *Thread2(void *unused) {
17   for (int i = 0; i < N; i++) {
18     fprintf(stderr, "%s %d\n", __func__, i);
19     free(x[i]);
20   }
21   return NULL;
22 }
23 
main()24 int main() {
25   for (int i = 0; i < N; i++)
26     x[i] = malloc(128);
27   pthread_t t[2];
28   pthread_create(&t[0], 0, Thread1, 0);
29   pthread_create(&t[1], 0, Thread2, 0);
30   pthread_join(t[0], 0);
31   pthread_join(t[1], 0);
32 }
33