#include <pthread.h> #include <stdlib.h> #include <stdio.h> const int N = 1000; void *x[N]; void *Thread1(void *unused) { for (int i = 0; i < N; i++) { fprintf(stderr, "%s %d\n", __FUNCTION__, i); free(x[i]); } return NULL; } void *Thread2(void *unused) { for (int i = 0; i < N; i++) { fprintf(stderr, "%s %d\n", __FUNCTION__, i); free(x[i]); } return NULL; } int main() { for (int i = 0; i < N; i++) x[i] = malloc(128); pthread_t t[2]; pthread_create(&t[0], 0, Thread1, 0); pthread_create(&t[1], 0, Thread2, 0); pthread_join(t[0], 0); pthread_join(t[1], 0); }