在使用多线程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);
}