gpt4 book ai didi

c++ - C++ 中的 std::thread 库是否支持嵌套线程?

转载 作者:行者123 更新时间:2023-11-30 01:08:25 27 4
gpt4 key购买 nike

我想像这样使用 std::thread 库在 C++ 中创建嵌套线程。

#include<iostream>
#include<thread>
#include<vector>
using namespace std;

void innerfunc(int inp)
{
cout << inp << endl;
}
void outerfunc(int inp)
{
thread * threads = new thread[inp];
for (int i = 0; i < inp; i++)
threads[i] = thread(innerfunc, i);
for (int i = 0; i < inp; i++)
threads[i].join();
delete[] threads;
}
int main()
{
int inp = 0;
thread t1 = thread(outerfunc,2);
thread t2 = thread(outerfunc,3);
t1.join();
t2.join();
}

我可以安全地执行此操作吗?我担心 join() 是否正常工作。

最佳答案

C++ 中并没有真正的“嵌套”或“子”线程,操作系统模型不会立即映射到 C++。 C++ 的模型在 threads of execution being associated with thread objects 中得到了更准确的描述。 .

来自链接的cppreference;

The class thread represents a single thread of execution.

thread 对象可以根据需要移动(std::move);这实际上是一个所有权问题,谁需要在 thread 对象超出范围之前 join() 对象。

在回答问题时;

Can I do this safely?

是的。执行线程(及其关联的 thread 对象)可以在“嵌套”线程中创建并成功执行。

I am worried whether join() works correctly.

是的,会的。这与线程的“所有权”有关。只要在 thread 对象超出范围之前加入执行线程,它就会按您预期的方式工作。


旁注;我确定 innerfunc 仅用于演示,但 cout 可能不会按预期同步。输出将是“乱码”。

关于c++ - C++ 中的 std::thread 库是否支持嵌套线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42806828/

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