繁体   English   中英

C++ 中的多线程:加入线程的正确方法

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM