- 论坛徽章:
- 0
|
#include <stdio.h>
#include <pthread.h>
pthread_mutex_t mymutex;
pthread_cond_t mycond;
void * func(void * temp)
{
pthread_mutex_lock(&mymutex);
write(1, "\nlock", 5);
pthread_cond_wait(&mymutex, &mycond);
write(1, "\nwait", 5);
pthread_mutex_unlock(&mymutex);
write(1, "\nhi", 3);
return NULL;
}
int main()
{
pthread_t tid;
int a ;
pthread_mutex_init(&mymutex, NULL);
pthread_cond_init(&mycond, NULL);
pthread_create(&tid, NULL, func, NULL);
sleep(3);
pthread_cond_signal(&mycond);
sleep(1);
write(1, "\n3", 2);
pthread_mutex_destroy(&mymutex);
pthread_cond_destroy(&mycond);
pthread_join(tid, NULL);
}
过程调试发现这样子的现象:
(1)主线程sleep(3);
(2)转到func( ), 在func()中打印"lock ", 然后阻塞在pthread_cond_wait(&mymutex, &mycond);
(3)接着执行主线程main()中的pthread_cond_signal(&mycond), 打印"3";
(4)主线程阻塞与pthread_join(); 一直阻塞 , 不退出shell;
调试发现pthread_cond_signal()返回0即信号函数正确返回,并且信号发送前
pthread_cond_wait(&mymutex, &mycond)正在阻塞;
为什么pthread_cond_wait(&mymutex, &mycond)没有收到发送的信号而还是阻塞在
pthread_cond_wait() 呢? 这样导致了main()最终阻塞与pthread_join().
--------
来不急查资料, 问问这里的大侠们。
谢谢啦, 先 ~~~  |
|