Thread Scheduling
/* state > 0, multiple readers; state = 0, free */ pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; pthread_cond_t cond1 = PTHREAD_COND_INITIALIZER; pthread_cond_t cond2 = PTHREAD_COND_INITIALIZER; int start = 0; int count = 0; void * display(int * max_iterations) { struct timespec wakeup_time; int iterations = 0; now.tv_nsec = 0; now.tv_sec = time(NULL) + 1; pthread_mutex_lock(&mutex); pthread_cond_timedwait(&cond2, &mutex); pthread_cond_signal(&cond1); do { count = 0; now.tv_nsec += 100000000; if (now.tv_nsec == 1000000000) { now.tv_nsec = 0; now.tv_sec++; } pthread_cond_timedwait(&cond2, &mutex); printf("Copied 4096B %d times during the last .1 second\n", count); } while(iterations++ < *max_iterations); pthread_mutex_unlock(&mutex); exit(0); } int main() { struct sched_param sparam; int max_iterations = 10; pthread_t thread; char from[4096]; char to[4096]; pthread_setschedparam(pthread_self(), SCHED_FIFO, NULL); pthread_create(&thread_id, , display_thread, &max_iterations); sparam.sched_priority = sched_get_priorit_max(SCHED_FIFO); pthread_setschedparam(thread_id, SCHED_FIFO, &sparam); pthread_mutex_lock(&mutex); while(start == 0) pthread_cond_wait(&cond1, &mutex); pthread_mutex_unlock(&mutex); while(1) { memcpy(to, from, 4096); pthread_mutex_lock(&mutex); count++; pthread_mutex_unlock(&mutex); } }