2012-11-11 22 views
0
#include<pthread.h> 
#include<stdio.h> 
#include <errno.h> 
pthread_cond_t done; 
pthread_mutex_t mutex; 
void*cond_wait(void*p){ 
while(1){ 
printf("%dwait\n",(int)p); 
pthread_cond_wait(&done,&mutex); 
printf("%dwakeup\n",(int)p); 
} 

} 
int main(){ 
int status; 
int i=1; 
pthread_t p; 
status=pthread_mutex_init(&mutex,NULL); 
pthread_mutex_lock(&mutex); 
pthread_cond_init(&done,NULL); 
pthread_create(&p,NULL,cond_wait,(void*)1); 
while(1){ 
sleep(1); 
pthread_cond_signal(&done); 
} 
} 

线程刚刚醒来,而不是阻止互斥体,因为它不调用调用调用pthread_cond_wait无锁mutex.Is是正确的?呼叫调用pthread_cond_wait没有锁定互斥

回答

1

如果调用pthread_cond_wait()而调用线程已经锁定了互斥锁,则该程序具有未定义的行为。任何事情都可能发生,包括崩溃。