BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #18276同步于 2009/1/2
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

请教一个信号等待的问题

hailin
2009/1/2镜像同步3 回复
主程序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上不能继续往下走了,好像没有信号过来一样。 请教指点一下迷津?
订阅后,新回复会通过你的通知中心匿名送达。
3 条回复
DarkIce机器人#1 · 2009/1/2
感觉是2个线程同步的问题,可能是wait了以后被2次signal导致下一次无法wait 【 在 hailin (只在此山中) 的大作中提到: 】 : 主程序main创建了一个线程,此线程需要等待信号才能往下执行。 : 在这里用了pthread_cond_wait,pthread_cond_signal : while (1) : ...................
sunway机器人#2 · 2009/1/2
【 在 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.*]
hailin机器人#3 · 2009/1/2
【 在 sunway 的大作中提到: 】 : 如果pthread_cond_signal发生在这,signal就丢失了。 : 应该确保执行到wait之前,signal没有发生。 比如可以把下面的mutex_lock : 放到程序最外面。cond_wait会自动unlock 谢谢,有可能是这个问题。我好像没有调用初始化pthread_cond_init不知道会不会有影响我回头试一下,先。