C++ 线程基础全解析
1. C++ 线程基础示例
为了展示 C++ 线程的简洁性,下面的示例创建了两个线程并等待它们执行完毕:
#include <thread>
#include <iostream>
void mythread()
{
std::cout << "Hello World\n";
}
main()
{
std::thread t1{mythread};
std::thread t2{mythread};
t1.join();
t2.join();
}
// > g++ -std=c++17 scratchpad.cpp -lpthread; ./a.out
// Hello World
// Hello World
与 POSIX 版本的此示例相比,有一些显著差异:
- 线程函数本身可以有多种不同的函数签名,不限于 (void *)(*)(void *)
。在此示例中,线程函数使用 void(*)()
签名。
- 线程类型的构造函数也会创建线程(无需先定义类型,然后再显式创建线程)。
需要注意的是,在 Linux 中,仍需要将 pthread
库链接到示例中。这是因为,实际上,C++ 是使用 pthread
实例来提供线程支持的。
2. 获取线程 ID
和 POSIX 版本一样,C++ 也提供了获取线程 I