返回信息流主程序main创建了一个线程,此线程需要等待信号才能往下执行。
在这里用了pthread_cond_wait,pthread_cond_signal
while (1)
{
// waiting for message
pthread_mutex_lock(&g_mutex);
pthread_cond_wait(&g_qready, &g_mutex);
...
pthread_mutex_unlock(&g_mutex);
}
上面的线程创建好后,随后另一处用pthread_cond_signal触发上面程序继续执行。可是奇怪的是,上面的线程有时可以通过wait继续往下执行,有时却死在wait上不能继续往下走了,好像没有信号过来一样。
请教指点一下迷津?
这是一条镜像帖。来源:北邮人论坛 / cpp / #18276同步于 2009/1/2
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
请教一个信号等待的问题
hailin
2009/1/2镜像同步3 回复
订阅后,新回复会通过你的通知中心匿名送达。
3 条回复
感觉是2个线程同步的问题,可能是wait了以后被2次signal导致下一次无法wait
【 在 hailin (只在此山中) 的大作中提到: 】
: 主程序main创建了一个线程,此线程需要等待信号才能往下执行。
: 在这里用了pthread_cond_wait,pthread_cond_signal
: while (1)
: ...................
【 在 hailin (只在此山中) 的大作中提到: 】
: 标 题: 请教一个信号等待的问题
: 发信站: 北邮人论坛 (Fri Jan 2 19:03:53 2009), 站内
:
: 主程序main创建了一个线程,此线程需要等待信号才能往下执行。
: 在这里用了pthread_cond_wait,pthread_cond_signal
: while (1)
: {
: // waiting for message
如果pthread_cond_signal发生在这,signal就丢失了。
应该确保执行到wait之前,signal没有发生。 比如可以把下面的mutex_lock
放到程序最外面。cond_wait会自动unlock
: pthread_mutex_lock(&g_mutex);
: pthread_cond_wait(&g_qready, &g_mutex);
: ...
: pthread_mutex_unlock(&g_mutex);
: }
:
: 上面的线程创建好后,随后另一处用pthread_cond_signal触发上面程序继续执行。可是奇怪的是,上面的线程有时可以通过wait继续往下执行,有时却死在wait上不能继续往下走了,好像没有信号过来一样。
:
: 请教指点一下迷津?
:
: --
:
: ※ 来源:·北邮人论坛 http://forum.byr.edu.cn·[FROM: 59.64.158.*]
【 在 sunway 的大作中提到: 】
: 如果pthread_cond_signal发生在这,signal就丢失了。
: 应该确保执行到wait之前,signal没有发生。 比如可以把下面的mutex_lock
: 放到程序最外面。cond_wait会自动unlock
谢谢,有可能是这个问题。我好像没有调用初始化pthread_cond_init不知道会不会有影响我回头试一下,先。