为简单起见,我有一个对象(类),我想以线程的形式运行。 该对象拥有自己的成员。
我想使用线程池在4个线程上创建,并且每次运行那些具有不同参数的4个线程。
类(线程类)看起来:
class CLogicThread {
public:
CLogicThread();
void RunLogic();
void SetParams(int num);
virtual ~CLogicThread();
private:
int m_Number = 0;
};
void CLogicThread::RunLogic() {
m_Number = m_Number + rand() % 2;
int miliToSleep = rand() % 2000 + 100;
usleep(miliToSleep);
std::cout << "Running Thread Id : " << std::this_thread::get_id() << " Value: " << m_Number;
}
void CLogicThread::SetParams(int num) {
m_Number = num;
}
每当有一个线程提前完成它的工作时,它将获得一个新的工作(不创建新线程,即使用其中一个空闲线程)。 类似的东西:
Pool pool(4); // I dont have this class and looks for it
int counter = 0;
while (true) {
usleep(10);
counter++;
// the next code line will be blocked till new thread is avaliable
CLogicThread* pLogicThread = pool->GetThreadElement();
pLogicThread->SetParams(counter);
pLogicThread->RunLogic();
}
我看过这里: Thread pooling in C++11
在这里: CTPL
但是没有找到我需要的游泳池。 我可以使用蚂蚁开源池吗?或者我需要实施它吗?