C++11的std::thread存在的问题
·
如你所知,多线程开发是软件开发的重要技术手段之一。其简化了并行编程的难度,具有极大提升 CPU 利用率,提升程序处理数据的能力等众多优点。但是相比单线程编程有一定的编程难度和门槛。在目前绝大多数软性系统中几乎是必不可少的技术,同时也是面试中的常客。
C++11的 std::thread 存在的问题
看下面一段代码,使用 std::thread 启动了一个线程。子线程的作用单纯就是睡眠两秒。
#include <chrono>
#include <thread>
int main() {
std::thread th([] {
std::this_thread::sleep_for(std::chrono::seconds(2));
});
}
有经验的朋友很容易判断处理,这里的主线程会首先结束,但是子线程还在运行。在默认情况下,两个线程都会继续往下运行。

在 gcc-MinGW-W64 下会在运行后报如下异常。
terminate called without an active exception
如何避免这种问题,答案是 使用 join() 或 detach()。
- join:等待线程完成其执行;
- detach:容许线程从线程句柄独立开来执行。
其中使用 detach() 直接将线程独立出来后就难以对线程进行实际的把控,因此最常用的就是 join()。
#include <chrono>
#include <thread>
int main() {
std::thread th([] {
std::this_thread::sleep_for(std::chrono::seconds(2));
});
th.join();
}更多推荐


所有评论(0)