【发布时间】:2013-08-05 17:35:36
【问题描述】:
令我惊讶的是,一个已完成执行但尚未加入的 C++11 std::thread 对象仍然是 considered 一个活动的执行线程。这在以下代码示例中进行了说明(基于带有 g++ 4.7.3 的 Xubuntu 13.03 构建)。有谁知道 C++11 标准是否提供了一种方法来检测 std::thread 对象是否仍在主动运行代码?
#include <thread>
#include <chrono>
#include <iostream>
#include <pthread.h>
#include <functional>
int main() {
auto lambdaThread = std::thread([](){std::cout<<"Excuting lambda thread"<<std::endl;});
std::this_thread::sleep_for(std::chrono::milliseconds(250));
if(lambdaThread.joinable()) {
std::cout<<"Lambda thread has exited but is still joinable"<<std::endl;
lambdaThread.join();
}
return 0;
}
【问题讨论】:
-
joinable与线程是否正在执行无关。 -
这个链接的答案不相关,我想知道如何检查线程是否仍然处于活动状态,而不是何时可以安全加入,竹子的答案完美解决了这个问题
标签: c++ multithreading c++11