#define _GNU_SOURCE
#include <pthread.h>

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;
}
