[英]Multithreading in C++: The correct way to join threads
我是多线程的新手,所以任何建议都将不胜感激。 以下程序接受一个整数向量(例如 1 2 3 4 5 6 7)并将它们作为线程处理。 我想知道我加入线程的方法是否正确,以及我是否可以进行任何改进。
我希望我的解释清楚! 这是我的代码片段。 这不是完整的代码,我只是确保我走正确的路:
//vector's name is 'inputs' and it contains integers
for (int unsigned i = 0; i < inputs.size(); i++) {
thread thread_obj(thread_function, inputs.at(i));
thread_obj.detach();
}
for (int unsigned i = 0; i < inputs.size(); i++) {
thread_obj.join();
}
您的代码具有未定义的行为,所以不,这是不正确的。 这里的问题是,如果joinable()
为true
,您只能调用join()
并且因为您调用了detach()
,所以joinable()
将返回false
。
好消息是这确实是一个非常简单的修复。 您只需要删除对detach
的调用。 要完成代码,只需填充一个线程向量,然后将它们全部加入
std::vector<std::thread> threads;
threads.reserve(inputs.size());
for (int unsigned i = 0; i < inputs.size(); i++) {
threads.push_back(std::thread{thread_function, inputs.at(i)};
}
// now all threads are running, or waiting to run
for (int unsigned i = 0; i < inputs.size(); i++) {
threads[i].join();
}
// now all threads have been joined
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.