C++ thread库

参考cplusplus
参考cppreference

0.线程的基础知识

0.1 线程的状态

0.2 c++线程的joinable和detached状态

  • joinable
    一个可结合的线程能够被其他线程收回其资源和杀死;在被其他线程回收之前,它的存储器资源(如栈)是不释放的。
  • detached
    一个分离的线程是不能被其他线程回收或杀死的,它的存储器资源在它终止时由系统自动释放。

0.3 两种等待线程结束的方式

  • 当线程启动后,一定要在和线程相关联的thread销毁前,确定以何种方式等待线程执行结束。
    1)detach方式,启动的线程自主在后台运行,当前的代码继续往下执行,不等待新线程结束。
    2)join方式,等待启动的线程完成,才会继续往下执行。

1.构造函数

  • 注意第二个构造函数:
    新产生的线程会调用fn函数,该函数的参数由args给出。
template <class Fn, class... Args>
explicit thread (Fn&& fn, Args&&... args);

2.赋值操作

// move (1) 
thread& operator= (thread&& rhs) noexcept;
// copy [deleted] (2)   
thread& operator= (const thread&) = delete;
  • 当前对象不能是joinable的
// example for thread::operator=
#include <iostream>       // std::cout
#include <thread>         // std::thread, std::this_thread::sleep_for
#include <chrono>         // std::chrono::seconds
 
void pause_thread(int n) 
{
  std::this_thread::sleep_for (std::chrono::seconds(n));
  std::cout << "pause of " << n << " seconds ended\n";
}

int main() 
{
  std::thread threads[5];   // 该thread对象不是joinable

  std::cout << "Spawning 5 threads...\n";
  for (int i=0; i<5; ++i)
    threads[i] = std::thread(pause_thread,i+1);   // move-assign threads

  std::cout << "Done spawning threads. Now waiting for them to join:\n";
  for (int i=0; i<5; ++i)
    threads[i].join();

  std::cout << "All threads joined!\n";

  return 0;
}

3.判断对象是否是joinable

  • 如下三种情况的thread对象不是joinable
    1)默认构造的
    2)对象进行了移动(构建其他对象,或者赋值)
    3)已经调用了join和detach
bool joinable() const noexcept;
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 接着上节 atomic,本节主要介绍condition_varible的内容,练习代码地址。本文参考http://...
    jorion阅读 12,701评论 0 7
  • 接着上节 condition_varible ,本节主要介绍future的内容,练习代码地址。本文参考http:/...
    jorion阅读 14,996评论 1 5
  • 本文主要是针对C++中多线程并发操作参见(cplusplus)进行解释,文章从下面几个方面进行学习,分别介绍多线程...
    jorion阅读 13,311评论 0 10
  • 题记:只有当我们认为外界不存在强大的压力时,我们才会为自己的行为发自内心地负起责任。 日常生活中,很多家长都会用物...
    赵月晴阅读 1,504评论 0 0
  • 不得不说,2017年,就这么过去了。 这一年,“唱民谣太穷”的赵雷终于火了,但早就火了的朴树,却依然很穷。 一曲《...
    简易城阅读 1,297评论 0 0

友情链接更多精彩内容