记一次join()卡死问题
在Stop函数里面,mutex.lock()锁住,m_thread.Join(),mutex没有unlock;
Join()函数如下:
m_thread指针调用join()函数后,主线程不动,m_thread会在join()中的WaitForSingleObjectEx()函数中等到m_thread执行完任务函数,让我们看看执行的任务函数具体什么样子,如下:
任务函数Loop()中会使用 lock(m_mutex),lock会尝试m_mutex.lock(),但是,第一张图内,m_mutex是上锁状态,lock会停在这里,等待m_mutex.unlock后,再次尝试m_mutex.lock(),简而言之,lock这里发生了阻塞。Join函数等待Loop()函数退出,而Loop函数等待 Join函数退出后m_mutex.unlock() 然后Loop函数内的lock将m_mutex.lock(),Join函数和Loop()互相等待,产生死锁;
解决
Stop()函数内部,不对m_mutex加锁;