在 C++11 标准中,引入了对多线程编程的支持,下面我们将详细介绍使用 C++11 的多线程编程,包括基本的线程创建、同步、互斥、条件变量等内容。
1. 创建线程
在 C++11 中,创建线程可以使用 std::thread
类。它是一个简单而强大的工具,可以使我们轻松地在程序中创建和管理线程。
1.1 创建线程的基本语法
1 |
|
关键点:
std::thread
构造函数接受一个可调用对象(函数指针、lambda 表达式等)。- 使用
t.join()
方法使主线程等待线程 t 的完成。
2. 线程参数传递
我们可以通过 std::thread
的构造函数给线程传递参数。
2.1 线程参数示例
1 |
|
关键点:
- 可以在
std::thread
的构造函数中传递参数。
3. 线程同步
在多线程编程中,线程之间的同步至关重要,以防止数据竞争和不一致性。C++11 提供了一系列同步原语。
3.1 互斥量 std::mutex
std::mutex
是用于保护共享数据的简单互斥量。
3.1.1 使用 std::mutex
的示例
1 |
|
关键点:
- 使用
mtx.lock()
和mtx.unlock()
来保护对共享变量的访问。
3.2 std::lock_guard
std::lock_guard
是一种 RAII 风格的互斥量管理类,确保异常处理时也能释放锁。
3.2.1 使用 std::lock_guard
的示例
1 |
|
关键点:
std::lock_guard
会在超出作用域时自动解锁,避免泄漏锁。
4. 条件变量 std::condition_variable
条件变量用于线程间的通信,允许一个或多个线程等待某个条件的发生。
4.1 条件变量的基本用法
4.1.1 示例
1 |
|
关键点:
- 使用
std::condition_variable::wait()
可以在条件不满足时阻塞线程,条件满足时被唤醒。 notify_one()
和notify_all()
方法用于唤醒一个或所有等待线程。
总结
C++11 提供的多线程支持使得编写并发程序变得更加简单和安全。我们介绍了如何创建线程、传递参数、同步机制(互斥量和条件变量)等基本概念,理解和掌握这些内容将有助于你在实际编程中应用多线程。