text: #include <stdio.h>
  
  #include "mythreads.h"
  
  pthread_mutex_t g = PTHREAD_MUTEX_INITIALIZER;
  pthread_mutex_t m1 = PTHREAD_MUTEX_INITIALIZER;
  pthread_mutex_t m2 = PTHREAD_MUTEX_INITIALIZER;
  
  void *worker(void *arg) {
      Pthread_mutex_lock(&g);
      if ((long long)arg == 0) {
          Pthread_mutex_lock(&m1);
          Pthread_mutex_lock(&m2);
      } else {
          Pthread_mutex_lock(&m2);
          Pthread_mutex_lock(&m1);
      }
      Pthread_mutex_unlock(&m1);
      Pthread_mutex_unlock(&m2);
      Pthread_mutex_unlock(&g);
      return NULL;
  }
  
  int main(int argc, char *argv[]) {
      pthread_t p1, p2;
      Pthread_create(&p1, NULL, worker, (void *)(long long)0);
      Pthread_create(&p2, NULL, worker, (void *)(long long)1);
      Pthread_join(p1, NULL);
      Pthread_join(p2, NULL);
      return 0;
  }
  