#include #include #include #include #ifndef NUM_THREADS #define NUM_THREADS 20 #endif static pthread_mutex_t barrier_mutex; static pthread_t tids[NUM_THREADS]; static int done = 0; static void * malloc_thread(void *unused) { void *m; int i = 0; pthread_mutex_lock(&barrier_mutex); pthread_mutex_unlock(&barrier_mutex); while (done == 0) { m = malloc(16); free(m); i++; } return ((void *)i); } int main(int argc, char *argv[]) { int i; int ret; void *count; pthread_mutex_init(&barrier_mutex, NULL); pthread_mutex_lock(&barrier_mutex); for (i = 0; i < NUM_THREADS; i++) { ret = pthread_create(&tids[i], NULL, malloc_thread, NULL); if (ret != 0) { printf("pthread_create returned %d\n", ret); exit(1); } } pthread_mutex_unlock(&barrier_mutex); sleep (10); done = 1; for (i = 0; i < NUM_THREADS; i++) { ret = pthread_join(tids[i], &count); printf("pthread_join thread %d returned %d, count %d\n", i, ret, (int)count); } return (0); }