在使用多线程pthread_cond_signal,pthread_cond_wait时,如果在signal的时候,wait的线程在忙,没有多余的线程在wait时,signal会失效,这时候wait线程如果没有去判断队列是否有数据,而直接去wait,队列的数据就没被取走执行了。
所以在wait线程中,要先判断一下队列是否为空,再去wait
void CondThread::Notify()
{
pthread_mutex_lock(&m_mutex);
pthread_cond_signal(&m_cond);
pthread_mutex_unlock(&m_mutex);
}
void CondThread::Execute()
{
pthread_mutex_lock(&m_mutex);
while (m_bStop == false)
{
if (IsQEmpty())
{
pthread_cond_wait(&m_cond, &m_mutex);
}
pthread_mutex_unlock(&m_mutex);
DoTask();
pthread_mutex_lock(&m_mutex);
}
pthread_mutex_unlock(&m_mutex);
}
本文探讨了在使用pthread_cond_signal和pthread_cond_wait时,如何避免因忙等待导致信号失效的问题。关键在于wait线程在接收到信号前先检查队列状态,确保数据被正确处理。
1176

被折叠的 条评论
为什么被折叠?



