2.1.2 等待线程完成

  如果你想确保在主线程退出前,子线程已经执行完毕,可以通过结合(joining)线程,来等待一个线程的完成。通过在相关联的std::thread示例上调用join()函数来实现,调用后,主线程在子线程运行期间将做不了任何有用的事,唯有等待。

struct func
{
    int& i;
    func(int& i_) :i(i_) {}

    void operator()()
    {
        for (unsigned j = 0; j < 1000000; j++)
        {
            do_somnething(i);    // 不断对引用的访问
        }
    }
};

void opps()
{
    int some_local_state = 0;
    func my_func(some_local_state);
    std::thread my_thread(my_func);
    my_thread.join();            // 确保线程结束后,才退出
}

 

posted on 2021-05-17 14:49  天官赐福  阅读(82)  评论(0)    收藏  举报