在特定条件下终止特定线程



我有一个程序,其中有多个线程在无限循环中运行。每个线程可以处理一定数量的任务,例如MAXTASKFOREACHTHREAD。当任务数量增加时,将生成一个新线程。如果MAXTASKFOREACHTHREAD未达到,则将向其中添加新任务。但是,如果任务完成后,线程中的任务数等于0,在某个特定点。我想终止这个线程。我不希望这个线程一直在等待任务。可以根据需要生成一个新线程。

class ThreadPool
{
void createThread();
static void threadFunc(ThreadPool *);
private:
thread t;
int val = 0;
}
void ThreadPool::createThread()
{
t = thread(threadFunc, this);
}
void ThreadPool::threadFunc();
//carries the function implementation regarding tasks
int main()
{
vector<ThreadPool *> v;
v.push_back(new ThreadPool());
v.push_back(new ThreadPool());
v.push_back(new ThreadPool());
v[0].createThread();
v[1].createThread();
v[2].createThread();

}
// Code might have syntax error, I just typed out!
// Now how should I proceed with the deletion of thread, without causing memory corruption!, I need to delete the corresponing object, of the thread
// I am looking for a idea, how to deal with this, without increasing the complexity by using locks.

请给一些建议!如有不清楚之处,请加注释。

您似乎忘记了线程运行代码。你可以简单地使用工作线程本身来检查是否有更多的工作。

首先,让我们澄清一些困惑。ThreadPool包含多个线程。在你的例子中,v就是那个池子。std::vector不是一个真正方便的接口。因此,将现有的ThreadPool重命名为WorkerThread,并使用private: std::vector<WorkerThread>创建ThreadPool。(对象,不是指针)

WorkerThreadThreadPool合作。您的WorkerThread::threadFunc有一个主循环,检查是否有工作。如果是,则执行。但是如果没有工作,那就是退出线程的情况。您退出线程主循环,告诉ThreadPool您已经完成了,并让它调用join。或者,detachthe WorkerThreads.

另一种删除线程的方法是在ThreadPool中创建一个特殊的任务,这会导致拾取它的WorkerThread退出主循环。例如,这可以作为一个空的std::function<>来实现。通过这种方式,您可以主动减少线程数,即使还有剩余的工作。

相关内容

  • 没有找到相关文章

最新更新