C++ 11中的std::thread如何改写为长尾?

2026-04-17 00:201阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计501个文字,预计阅读时间需要3分钟。

C++ 11中的std::thread如何改写为长尾?

启动一个线程,不多说,直接上代码:void func(); int main() { std::thread t(func); // 这里就开始启动线程 return 0; } void func() { std::cout << Hello, <

启动一个线程

话不多说,直接上代码

C++ 11中的std::thread如何改写为长尾?

void func(); int main() { std::thread t(func); //这里就开始启动线程了 return 0; } void func() { std::cout << "Hello, " << std::this_thread::get_id() << std::endl; }

等待子线程结束

有时候开启一个子线程之后,父线程很快运行结束;
如果想要父线程做完自己的工作之后等待子线程运行完再结束

...... std::thread t(func); t.join(); ......

子线程分离

子线程有很多很多工作需要完成,父线程不想等待它,这时候可以用detach

...... std::thread t(func); t.detach();

子线程分离后相当于是一个后台线程,这时负责子线程资源回收什么的,是c++运行库而不是父线程了.

注意点

要确保线程运行时所用的资源不会被提前释放

在上面这个小例子里,main线程创建了一个t线程,然后调用t.detach();
如果t线程中使用到了main线程里的某些资源(记作resources),那么就有必要引起注意.
如果main线程工作很少;t线程工作繁重,需要运行很长时间;
当main线程结束时,resources会被释放,然而这时t线程中还需要用到这些resources.
这就是问题所在:####要确保线程运行时所用的资源不会被提前释放

detach和join两者只能用一次

不能调用了detach之后再调用join;也不能调用join之后再调用detach (测试的时候我就试了先用detach再用join,然后就死了,卡了好一会。。)

本文共计501个文字,预计阅读时间需要3分钟。

C++ 11中的std::thread如何改写为长尾?

启动一个线程,不多说,直接上代码:void func(); int main() { std::thread t(func); // 这里就开始启动线程 return 0; } void func() { std::cout << Hello, <

启动一个线程

话不多说,直接上代码

C++ 11中的std::thread如何改写为长尾?

void func(); int main() { std::thread t(func); //这里就开始启动线程了 return 0; } void func() { std::cout << "Hello, " << std::this_thread::get_id() << std::endl; }

等待子线程结束

有时候开启一个子线程之后,父线程很快运行结束;
如果想要父线程做完自己的工作之后等待子线程运行完再结束

...... std::thread t(func); t.join(); ......

子线程分离

子线程有很多很多工作需要完成,父线程不想等待它,这时候可以用detach

...... std::thread t(func); t.detach();

子线程分离后相当于是一个后台线程,这时负责子线程资源回收什么的,是c++运行库而不是父线程了.

注意点

要确保线程运行时所用的资源不会被提前释放

在上面这个小例子里,main线程创建了一个t线程,然后调用t.detach();
如果t线程中使用到了main线程里的某些资源(记作resources),那么就有必要引起注意.
如果main线程工作很少;t线程工作繁重,需要运行很长时间;
当main线程结束时,resources会被释放,然而这时t线程中还需要用到这些resources.
这就是问题所在:####要确保线程运行时所用的资源不会被提前释放

detach和join两者只能用一次

不能调用了detach之后再调用join;也不能调用join之后再调用detach (测试的时候我就试了先用detach再用join,然后就死了,卡了好一会。。)