Skip to content
0

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));
}