5 pthread_mutex_t mutex1;
6 pthread_mutex_t mutex2;
8 static void * thread_doit(void *unused) {
9 pthread_mutex_lock(&mutex1);
10 pthread_mutex_lock(&mutex2);
11 pthread_mutex_unlock(&mutex2);
12 pthread_mutex_unlock(&mutex1);
16 int main(int argc, char* argv[]) {
19 printf("Expected usage: %s THREAD_NUM\n", argv[0]);
23 int THREAD_NUM = atoi(argv[1]);
26 printf("At least 2 threads are required\n");
30 pthread_t *threads = malloc(sizeof(pthread_t) * THREAD_NUM);
32 pthread_mutex_init(&mutex1, NULL);
33 pthread_mutex_init(&mutex2, NULL);
35 for(int i = 0; i < THREAD_NUM; i++) {
36 pthread_create(&threads[i], NULL, &thread_doit, NULL);
39 for(int i = 0; i < THREAD_NUM; i++) {
40 pthread_join(threads[i], NULL);
44 pthread_mutex_destroy(&mutex1);
45 pthread_mutex_destroy(&mutex2);