主题
C++并发编程
多线程
thread
thread 是 C++11 的标准库。
detach方法
将执行线程与线程对象分离。如何理解这里的分离?使用 std::thread 创建的是一个线程对象,其管理执行线程。分离之后,线程对象不再管理执行线程,而交由操作系统管理,即使线程对象析构了,执行线程依然可以独立继续运行。
- 分离并不是分离出一个独立的进程,执行线程仍然属于原进程,如果主进程结束,分离的线程也会结束。
- 分离之后,线程对象不能再调用 join 方法,
get_id()也没法获取线程 ID,因为不再管控了。
c++
static void demo()
{
int local_data = 3;
thread t([&]() -> void {
for (int i = 0; i < 10; i++)
{
std::cout << "demo in thread and sleep " << local_data << endl;
std::this_thread::sleep_for(std::chrono::seconds(local_data));
}
});
std::cout << "thread id = " << t.get_id() << endl;
t.detach();
std::cout << "After detach - Thread id: " << t.get_id() << std::endl;
// 线程对象马上析构,local_data 会被销毁,但分离的线程可能还在运行。
}
int main()
{
demo();
std::cout << "demon function has exited." << std::endl;
// 主线程结束,分离的线程也会结束。
std::this_thread::sleep_for(std::chrono::seconds(20));
}