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);
}
}

スレッドは、ミューテックスをロックせずに call pthread_cond_wait を呼び出さないため、ウェイクアップするだけでミューテックスによってブロックされません。それは正しいですか?

4

1 に答える 1

1

呼び出し元のスレッドが既にミューテックスをロックしていない状態で呼び出した場合pthread_cond_wait()、プログラムは未定義の動作をします。クラッシュを含め、あらゆることが起こりえます。

于 2012-11-12T10:14:07.143 に答える