#define _GNU_SOURCE #include pthread_mutex_t mtx; void* th(void* p) { pthread_mutex_lock(&mtx); pthread_mutex_unlock(&mtx); return NULL; } int main(int argc, char** argv) { pthread_t tid1, tid2; pthread_attr_t attr; pthread_mutexattr_t mtxattr; struct sched_param sp; pthread_mutexattr_init(&mtxattr); pthread_mutexattr_setprotocol(&mtxattr, PTHREAD_PRIO_INHERIT); pthread_mutex_init(&mtx, &mtxattr); pthread_attr_init(&attr); pthread_attr_setschedpolicy(&attr, SCHED_RR); sp.sched_priority = 10; pthread_attr_setschedparam(&attr, &sp); pthread_attr_setinheritsched(&attr, PTHREAD_EXPLICIT_SCHED); pthread_mutex_lock(&mtx); pthread_create(&tid1, &attr, th, NULL); pthread_create(&tid2, &attr, th, NULL); /* GO threads */ pthread_mutex_unlock(&mtx); pthread_join(tid1, NULL); pthread_join(tid2, NULL); return 0; }