執行緒池可以處理多執行緒問題,只要將任務放到任務佇列中,執行緒池中的執行緒就會從佇列中取任務,以預設的優先順序開始執行,如果你的任務數大於正在工作的執行緒數,則執行緒池將會建立一根新的執行緒來輔助工作,但是永遠都不會超過執行緒池中線程的最大值。
執行緒池的結構
#pragma once
#include #include #include #include using namespace std;
class mlock
;class itask
virtual ~itask(){}
public:
virtual void runitask() = 0;
};class mythreadpool
;
建立執行緒:
bool mythreadpool::createthreadpool(long lminthreadnum,long lmaxthreadnum)
} createthreadnum = lminthreadnum;
maxthreadnum = lmaxthreadnum;
}
銷毀執行緒:
void mythreadpool::destroythreadpool()
closehandle(*ite);
++ite;
} while(m_qitask.size() != 0)
m_qitask.clear();
}
執行緒執行函式
unsigned __stdcall mythreadpool::threadproc(void * lpvoid)
pitask = pthis->m_qitask.front();
pthis->m_qitask.pop_front();
pthis->m_lock.dlock();
pitask->runitask();
delete pitask;
pitask = null;
} pthis->runthreadnum--;
}return 0;
}
向執行緒池中投遞任務:
bool mythreadpool::postitask(itask* pitask)
else if(createthreadnum < maxthreadnum)//沒有空閒的執行緒但是沒達到最大值
releasesemaphore(m_semaphore, 1, null);
createthreadnum++;
} else
return 0;
}
簡單執行緒池實現
1.用於執行大量相對短暫的任務 2.當任務增加的時候能夠動態的增加執行緒池中線程的數量值到達乙個閾值 3.當任務執行完畢的時候,能夠動態的銷毀執行緒池中的執行緒 4.該執行緒池的實現本質上也是生產者與消費者模型的應用。生產者執行緒向任務佇列新增任務,一旦佇列有任務到來,如果有等待 執行緒就喚醒來執行...
簡單執行緒池實現
1.用於執行大量相對短暫的任務 2.當任務增加的時候能夠動態的增加執行緒池中線程的數量值到達乙個閾值 3.當任務執行完畢的時候,能夠動態的銷毀執行緒池中的執行緒 4.該執行緒池的實現本質上也是生產者與消費者模型的應用。生產者執行緒向任務佇列新增任務,一旦佇列有任務到來,如果有等待執行緒就喚醒來執行任...
自實現簡單執行緒池
執行緒池在現在的系統和框架中十分常見。明白執行緒池的思想原理,不僅對學習執行緒池有 很大的幫助。對理解一些系統的執行緒池實現也有很大的幫助。下面是我自己簡單實現的一 個執行緒池。用以對執行緒的簡單理解。執行緒的實現原理很簡單 執行緒池物件包含以下元件 工作者佇列,job佇列 使用者通過執行緒池物件新...