#include #include #include int stop = 1; pthread_mutex_t m; pthread_cond_t c; void * thr_routine(void *a) { pthread_mutex_lock(&m); if (stop) pthread_cond_wait(&c, &m); pthread_mutex_unlock(&m); return (0); } #define THREADS 1000 #define LOOPS 100 int main() { uint64_t s, e; pthread_t td[THREADS]; int i, loop; pthread_mutex_init(&m, NULL); pthread_cond_init(&c, NULL); s = rdtsc(); for (loop = 0; loop < LOOPS; ++loop) { pthread_mutex_lock(&m); for (i = 0; i < THREADS; ++i) { pthread_create(&td[i], NULL, thr_routine, NULL); } stop = 0; pthread_cond_broadcast(&c); pthread_mutex_unlock(&m); for (i = 0; i < THREADS; ++i) { pthread_join(td[i], NULL); } } e = rdtsc(); printf("%lld\n", e-s); return (0); }