修复并发修改线程池pending状态的问题

This commit is contained in:
chenxiaobin19
2023-10-11 11:05:30 +08:00
parent 1f9270d2fe
commit e2534061de
2 changed files with 6 additions and 1 deletions

View File

@ -82,6 +82,7 @@ ThreadPoolWorker::ThreadPoolWorker(uint idx, ThreadPoolGroup* group, pthread_mut
m_group = group;
m_tid = InvalidTid;
m_threadStatus = THREAD_UNINIT;
m_thrd_idle_waiting = false;
m_currentSession = NULL;
m_mutex = mutex;
m_cond = cond;
@ -280,7 +281,8 @@ bool ThreadPoolWorker::WakeUpToPendingIfFree()
{
bool ans = false;
pthread_mutex_lock(m_mutex);
if (m_threadStatus != THREAD_EXIT && m_threadStatus != THREAD_PENDING && m_currentSession == NULL) {
if (m_threadStatus != THREAD_EXIT && m_threadStatus != THREAD_PENDING && m_currentSession == NULL &&
m_thrd_idle_waiting) {
m_threadStatus = THREAD_PENDING;
pthread_cond_signal(m_cond);
ans = true;
@ -439,7 +441,9 @@ void ThreadPoolWorker::WaitNextSession()
if (unlikely(m_threadStatus == THREAD_PENDING || m_threadStatus == THREAD_EXIT)) {
break;
}
m_thrd_idle_waiting = true;
pthread_cond_wait(m_cond, m_mutex);
m_thrd_idle_waiting = false;
}
pthread_mutex_unlock(m_mutex);
m_group->GetListener()->RemoveWorkerFromList(this);

View File

@ -145,6 +145,7 @@ private:
uint m_idx;
knl_session_context* m_currentSession;
volatile ThreadStatus m_threadStatus;
bool m_thrd_idle_waiting;
ThreadStayReason m_reason;
Dlelem m_elem;
ThreadPoolGroup* m_group;