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。 因為線程是隨意跳的,如果一線程鎖上,為解鎖即跳到二線程,此時,二線程也鎖上,跳到一線程,那么一線程和二線程不是也讀鎖上了么?,不是就死鎖了么?
我試了一下,這種情況下,不會出現死鎖,求原因。
慕尼黑8549860
2023-03-03 18:14:04