我真的已经看不出问题在哪里了, 这个thread应该现在wait的一个condition上, 可是我调用了pthread_cond_wait之后,他好像没有等 而是直接结束了。 我用gdb 也说
The program being debugged stopped while in a function called from GDB.
When the function (pthread_cond_wait) is done executing, GDB will silently
stop (instead of continuing to evaluate the expression containing
程序:void *process(){
pthread_mutex_lock(queueLock);
if(numOfClientInline == 0){
 printf("queue is empty,\n");
 if(pthread_cond_wait(queueCon,queueLock)!=0){
 perror("Something wrong with wait..\n");
 }
 printf("wake up from wait\n");
}

pthread_mutex_unlock(queueLock);
pthread_detach(pthread_self());
pthread_exit("server exiting\n");
}
还有一个问题不是很明白, 我觉得子线程应该在主线程运行完了之后再进行, 可是这个线程貌似 pthread_create了之后就立刻开始执行了, 这是不是有什么问题呢?请达人指点, 小女在此先谢过啦~

解决方案 »

  1.   

    没有全部代码,无法判断真相,不过可以设想一些合理的场合:
    1.线程什么时候启动,和调用者线程之间没有先后次序问题,经常出现的一个例子是,pthread_create以后,线程有可能会在pthread_create函数返回以前结束,这时pthread_create函数得到的pthreadid就是错误的,所以推荐的做法就是使用pthread_cond_wait使线程阻塞一段时间,等调用者从pthread_create返回后,发送唤醒信号在继续运行,楼主的代码,应该是为了这个目的来设计的吧?
    2.在pthread_cond_wait处,只见结束线程,这个似乎是被cancel掉了,比如主线程退出了(exit()),会把所有的线程都cancel,pthread_cond_wait函数是可以cancel的函数,在阻塞状态下,也是可以被pthread_cancel函数调用直接中断的.可能还有其它原因,不妨把全部代码都贴上来