gpt4 book ai didi

c++ - 多线程独立任务

转载 作者:可可西里 更新时间:2023-11-01 10:27:46 25 4
gpt4 key购买 nike

我有 N 个任务,它们是独立的(即,写入不同的内存地址)但完成时间并不完全相同(比如 2 到 10 秒)。我有 P 个线程。

我可以将我的 N 个任务分成 P 个线程,然后启动我的线程。最终,在最后,将剩下一个线程来完成最后几个任务,这不是最优的。

我还可以启动 P 个线程,每个线程有 1 个任务,WaitForMultipleObjects,然后重新启动 P 个线程等(这就是我目前所做的,因为与任务相比,创建线程的开销很小)。但是,这也没有解决问题,仍然会有P-1个线程在某个时候等待最后一个。

有没有办法启动线程,一旦线程完成任务,就继续执行下一个可用任务,直到所有任务完成?

谢谢!

最佳答案

是的,它叫做线程池。这是一种非常普遍的做法。

http://en.wikipedia.org/wiki/Thread_pool_pattern

基本上,您创建一个任务队列(带有参数的函数指针),然后将任务推送到那里。您有 N 个正在运行的线程执行以下循环(示意图代码):

while (bRunning) {
task = m_pQueue.pop();
if (task) {
executeTask(task);
}
else {
//you can sleep a bit here if you want
}
}

有更优雅的方法来实现它(避免休眠等),但这就是它的要点。

关于c++ - 多线程独立任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9693478/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com