1ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* Simple possible deadlock */ 2ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include <pthread.h> 3ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 4ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic pthread_mutex_t m1 = PTHREAD_MUTEX_INITIALIZER; 5ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic pthread_mutex_t m2 = PTHREAD_MUTEX_INITIALIZER; 6ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 7ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void *t1(void *v) 8ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 9ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown pthread_mutex_lock(&m1); 10ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown pthread_mutex_lock(&m2); 11ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown pthread_mutex_unlock(&m1); 12ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown pthread_mutex_unlock(&m2); 13ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 14ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown return 0; 15ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 16ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 17ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void *t2(void *v) 18ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 19ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown pthread_mutex_lock(&m2); 20ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown pthread_mutex_lock(&m1); 21ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown pthread_mutex_unlock(&m1); 22ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown pthread_mutex_unlock(&m2); 23ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 24ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown return 0; 25ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 26ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 27ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownint main() 28ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 29ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown pthread_t a, b; 30ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 31ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* prevent spurious messages from the dynamic linker */ 32ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown pthread_mutex_lock(&m1); 33ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown pthread_mutex_unlock(&m1); 34ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 35ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown pthread_create(&a, NULL, t1, NULL); 36ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown pthread_create(&b, NULL, t2, NULL); 37ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 38ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown pthread_join(a, NULL); 39ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown pthread_join(b, NULL); 40ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 41ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown return 0; 42ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 43ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 44