void*pthread_producer();{while(1){pthread_mutex_lock(&mutex_p);…………pthread_mutex_unlock(&mutex_p)}}void*pthread_consumer(void*){while(1){pthread_mutex_lock(&mutex_c)…... void* pthread_producer( ); { while (1) { pthread_mutex_lock( &mutex_p ); ………… pthread_mutex_unlock( &mutex_p ) } } void* pthread_consumer( void* ) { while (1) { pthread_mutex_lock( &mutex_c ) ………… pthread_mutex_unlock( &mutex_c); } } 我们知道,两把锁,mutex_p, mutex_c,这种情况容易出现死锁,即 mutex_p 锁上,还未解锁即跳到第二条线程,mutex_c锁上,未解锁即跳到第一条线程,这样即出现死锁。 但是在这里将两把锁用成一把锁,如:将mutex_c改为mutex_p。 因为线程是随意跳的,如果一线程锁上,为解锁即跳到二线程,此时,二线程也锁上,跳到一线程,那么一线程和二线程不是也读锁上了么?,不是就死锁了么?
潇潇雨雨