【问题标题】:call pthread_cond_wait without locking mutex在不锁定互斥体的情况下调用 pthread_cond_wait
【发布时间】:2012-11-11 13:34:18
【问题描述】:
#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。是吗?

【问题讨论】:

    标签: pthreads mutex conditional-statements wait


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2010-11-22
      • 2013-02-02
      • 2011-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多