| #include <pthread.h> |
| |
| pthread_mutex_t mutex1 = PTHREAD_MUTEX_INITIALIZER; |
| pthread_mutex_t mutex2 = PTHREAD_MUTEX_INITIALIZER; |
| pthread_mutex_t mutex3 = PTHREAD_MUTEX_INITIALIZER; |
| |
| void * |
| thread3 (void *input) |
| { |
| pthread_mutex_unlock(&mutex2); // Set break point at this line. |
| pthread_mutex_unlock(&mutex1); |
| return NULL; |
| } |
| |
| void * |
| thread2 (void *input) |
| { |
| pthread_mutex_unlock(&mutex3); |
| pthread_mutex_lock(&mutex2); |
| pthread_mutex_unlock(&mutex2); |
| |
| return NULL; |
| } |
| |
| void * |
| thread1 (void *input) |
| { |
| pthread_t thread_2; |
| pthread_create (&thread_2, NULL, thread2, NULL); |
| |
| pthread_mutex_lock(&mutex1); |
| pthread_mutex_unlock(&mutex1); |
| |
| pthread_join(thread_2, NULL); |
| |
| return NULL; |
| } |
| |
| int main () |
| { |
| pthread_t thread_1; |
| pthread_t thread_3; |
| |
| pthread_mutex_lock (&mutex1); |
| pthread_mutex_lock (&mutex2); |
| pthread_mutex_lock (&mutex3); |
| |
| pthread_create (&thread_1, NULL, thread1, NULL); |
| |
| pthread_mutex_lock(&mutex3); |
| pthread_create (&thread_3, NULL, thread3, NULL); |
| |
| pthread_join (thread_1, NULL); |
| pthread_join (thread_3, NULL); |
| |
| return 0; |
| |
| } |