赞
踩
t.join()
join
方法用于同步主线程和子线程。也就是说,当主线程调用子线程的 join
方法时,主线程会被阻塞,直到子线程完成其执行。这意味着 join
方法确保主线程等待子线程结束,然后继续执行后续代码。
- #include <iostream>
- #include <thread>
-
- void threadFunction() {
- std::cout << "Thread is running..." << std::endl;
- }
-
- int main() {
- std::thread t(threadFunction);
-
- // 等待线程t完成
- t.join();
-
- std::cout << "Thread has finished." << std::endl;
- return 0;
- }

在这个示例中:
t.join()
时会被阻塞,直到 threadFunction
线程完成。t.detach()
detach
方法则是让子线程在后台独立运行,与主线程分离。分离后的线程(也称为“游离线程”)不能再被 join
,它的资源会在该线程完成后自动释放。主线程会继续执行而不会等待该子线程。
- #include <iostream>
- #include <thread>
- #include <chrono>
-
- void threadFunction() {
- std::this_thread::sleep_for(std::chrono::seconds(2)); // 模拟耗时任务
- std::cout << "Thread is running..." << std::endl;
- }
-
- int main() {
- std::thread t(threadFunction);
-
- // 分离线程t,使其在后台运行
- t.detach();
-
- std::cout << "Main thread is not blocked." << std::endl;
- // 主线程继续执行其他工作
- std::this_thread::sleep_for(std::chrono::seconds(3)); // 确保主线程不立即退出
- return 0;
- }

在这个示例中:
如果把std::this_thread::sleep_for(std::chrono::seconds(3)); // 确保主线程不立即退出注释掉:
join
detach
join
它。这意味着主线程不能直接等待线程完成,必须通过其他方式(如条件变量或信号)来确保线程已完成。否则,主线程可能会在分离的线程完成之前退出,这样会导致未定义行为(如访问已被释放的内存)。std::shared_ptr
或 std::unique_ptr
)来管理动态分配的资源,确保资源在不再需要时能够自动释放。std::thread
pool)可以更高效地管理线程的生命周期,并减少资源管理的麻烦。Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。