C++并发编程之线程启动(一)
发布人:shili8
发布时间:2024-12-26 04:12
阅读次数:0
**C++ 并发编程之线程启动 (一)**在 C++ 中,线程是程序执行的基本单位。线程启动是指创建并开始执行一个新线程的过程。在本文中,我们将讨论如何使用 C++ 的标准库(STL)来启动线程。
###1. std::thread 类C++ STL 提供了 `std::thread` 类来代表一个线程。这个类提供了多种方法来启动和管理线程。
####1.1 构造函数可以使用以下构造函数来创建一个新线程:
cpptemplateexplicit thread(F f);
其中 `F` 是一个 callable 对象(函数或 lambda 表达式)。这个构造函数会启动一个新的线程,并将 callable 对象作为参数传递给该线程。
####1.2 join() 方法当我们创建一个新线程后,我们需要等待它完成执行。可以使用 `join()` 方法来实现这一点:
cppvoid join();
这个方法会阻塞当前线程,直到新线程完成执行。
###2. std::thread 的示例代码下面是一个简单的示例代码,演示了如何使用 `std::thread` 类启动一个新线程:
cpp#include <iostream> #include <thread> void printHello() { std::cout << "Hello from thread!" << std::endl; } int main() { // 创建一个新线程,并将 callable 对象传递给它 std::thread t(printHello); // 等待新线程完成执行 t.join(); return0; }
在这个示例中,我们定义了一个名为 `printHello()` 的函数作为 callable 对象。然后,我们创建一个新线程,并将 callable 对象传递给它。最后,我们使用 `join()` 方法等待新线程完成执行。
###3. std::thread 的其他方法除了 `join()` 方法之外,`std::thread` 类还提供了以下其他方法:
####3.1 detach() 方法
cppvoid detach();
这个方法会将新线程分离(detach)到当前线程之外。这种方式下,新线程的执行不会被阻塞。
####3.2 id() 方法
cppstd::thread::id id() const noexcept;
这个方法会返回新线程的 ID。
####3.3 get_id() 方法
cppstatic std::thread::id get_id();
这个静态方法会返回当前线程的 ID。
### 总结在本文中,我们讨论了 C++ STL 中 `std::thread` 类的使用。我们学习了如何使用构造函数创建一个新线程,并使用 `join()` 方法等待它完成执行。同时,我们也了解了其他方法的作用,例如 `detach()、id() 和 get_id()`。
在下一篇文章中,我们将继续讨论 C++ 并发编程之线程启动 (二),包括如何使用 `std::thread` 类来管理多个线程,以及如何使用 `std::mutex` 和 `std::lock_guard` 来保护共享资源。