需要创建任意数量的 jthread 线程。在程序运行时确定它们的数量。
发现很多类似的例子:
void spawnThreads(int n) {
jthread threads[n];
for (int i = 0; i < n; i++)
{
threads[i] = jthread(foo, i);
}
}
结果证明它们显然不起作用,因为 cpp 禁止创建未定义大小的数组。之后我使用了一个动态数组,将第一行替换为:
jthread* threads = new jthread[n]{};
现在,线程已启动,但程序不会等待它们运行,而只是关闭。
如果它是线程,则由于代码中缺少 thread#.join(),会出现这种行为。但是 jthread 不需要 join() 操作,我作为新手感到困惑。
超出范围时,动态数组将不仅仅调用其元素的析构函数。如果没有人调用析构函数,那么没有什么能阻止代码“进一步运行”。然后才“出”。所有流程根本没有时间解决。手动调用它们就足够了
最后这一个
delete[]
将调用析构函数,实际上调用join
.我不知道为什么,但这是一个非常非常受欢迎的话题。当你说“这里是
std::vector
——出于某种原因,每个人都翘首以待,说“好吧,它不是 C++,它是一个库。”但是不,STL 是语言的一部分。它只是被巧妙地分开了。因此,std::vector
以及std::list
许多其他类 - 这是 c ++,而不是“由 Stepanov 编写的某种左撇子库”。现在代码变得简单漂亮。
我用
emplace_back
它来美容 :) 但它可能是这样的