C++11并发与多线程
发布人:shili8
发布时间:2025-01-06 11:38
阅读次数:0
**C++11 并发与多线程**
在 C++11 中,标准库提供了一个全新的并发模型,允许程序员编写高性能、低延迟的并行代码。这个新模型基于一个称为“线程”的概念,它是操作系统中最基本的执行单元。
**什么是线程?**
线程(Thread)是一个独立的执行流程,它可以在同一进程内并发执行多个任务。每个线程都有自己的栈空间、寄存器和程序计数器,允许它们独立地执行代码。
**为什么需要线程?**
线程是实现并行计算的基本单位。在单核CPU时代,线程可以提高系统的吞吐量和响应速度。随着多核CPU的普及,线程可以充分利用多核资源,显著提高系统的性能。
**C++11 中的线程**
在 C++11 中,标准库提供了一个名为 `std::thread` 的类来管理线程。这个类提供了一系列方法和函数来创建、启动、同步和终止线程。
### 创建线程要创建一个线程,我们需要定义一个线程函数,然后使用 `std::thread` 类的构造函数来创建一个线程对象。
cpp#include <thread> #include <iostream> void threadFunc() { std::cout << "Hello from thread!" << std::endl; } int main() { // 创建一个线程对象 std::thread t(threadFunc); // 等待线程结束 t.join(); return0; }
在这个例子中,我们定义了一个名为 `threadFunc` 的函数,然后使用 `std::thread` 类的构造函数创建一个线程对象。我们将 `threadFunc` 函数传递给构造函数,表示我们想执行这个函数作为线程。
### 启动线程启动线程非常简单,只需要调用 `join()` 方法即可。
cpp#include <thread> #include <iostream> void threadFunc() { std::cout << "Hello from thread!" << std::endl; } int main() { // 创建一个线程对象 std::thread t(threadFunc); // 启动线程 t.join(); return0; }
在这个例子中,我们创建了一个线程对象,然后调用 `join()` 方法启动线程。
### 同步线程同步线程是为了确保多个线程之间的执行顺序和数据一致性而设计的。在 C++11 中,标准库提供了几个同步类来实现这一点。
####互斥锁(Mutex)
互斥锁是一种基本的同步机制,它允许一个线程独占某个资源。
cpp#include <thread> #include <mutex> std::mutex mtx; void threadFunc() { // 锁住互斥锁 std::lock_guard<std::mutex> lock(mtx); // 执行一些代码 std::cout << "Hello from thread!" << std::endl; } int main() { // 创建两个线程对象 std::thread t1(threadFunc); std::thread t2(threadFunc); // 等待线程结束 t1.join(); t2.join(); return0; }
在这个例子中,我们定义了一个互斥锁 `mtx`,然后使用 `std::lock_guard` 类来锁住它。在 `threadFunc` 函数中,我们使用 `std::lock_guard` 来锁住互斥锁,以确保线程之间的执行顺序和数据一致性。
#### 条件变量(Condition Variable)
条件变量是一种高级的同步机制,它允许一个线程等待另一个线程的某个事件。
cpp#include <thread> #include <mutex> #include <condition_variable> std::mutex mtx; std::condition_variable cv; void threadFunc() { // 锁住互斥锁 std::lock_guard<std::mutex> lock(mtx); // 等待条件变量的通知 std::unique_lock<std::mutex> lock2(mtx); cv.wait(lock2, []{ return true; }); // 执行一些代码 std::cout << "Hello from thread!" << std::endl; } int main() { // 创建两个线程对象 std::thread t1(threadFunc); std::thread t2(threadFunc); // 等待线程结束 t1.join(); t2.join(); return0; }
在这个例子中,我们定义了一个互斥锁 `mtx` 和一个条件变量 `cv`。在 `threadFunc` 函数中,我们使用 `std::unique_lock` 来锁住互斥锁,然后等待条件变量的通知。
### 终止线程终止线程是为了确保程序能够正常退出而设计的。在 C++11 中,标准库提供了一个名为 `std::thread::terminate()` 的函数来终止线程。
cpp#include <thread> #include <iostream> void threadFunc() { std::cout << "Hello from thread!" << std::endl; } int main() { // 创建一个线程对象 std::thread t(threadFunc); // 终止线程 t.terminate(); return0; }
在这个例子中,我们创建了一个线程对象,然后调用 `terminate()` 函数终止线程。
### 总结C++11 中的并发与多线程提供了一种高性能、低延迟的编程模型。通过使用 `std::thread` 类和同步类,程序员可以轻松地实现并行计算和数据一致性。在本文中,我们介绍了创建、启动、同步和终止线程的基本方法,并提供了示例代码来演示这些概念。
### 参考* 《C++11标准库》第4 章:并发与多线程* 《C++ Primer》第5 章:并发与多线程