Modern C++学习笔记(四)
并行与并发
并行基础
- std::thread 用于创建一个执行的线程实例。使用时需要包含
<thread>
头文件- get_id() 来获取所创建线程的线程 ID
- join() 来等待一个线程结束(与该线程汇合)
互斥量与临界区
- 使用
<mutex>
头文件 - std::mutex 是 C++11 中最基本的互斥量类,可以通过构造 std::mutex 对象创建互斥量, 而通过其成员函数 lock() 可以进行上锁,unlock() 可以进行解锁。但是在实际编写代码的过程中,最好不去直接调用成员函数, 因为调用成员函数就需要在每个临界区的出口处调用 unlock(),当然,还包括异常。
- C++11 为互斥量提供了一个 RAII 机制的模板类
std::lock_guard
。在 RAII 用法下,对于临界区的互斥量的创建只需要在作用域的开始部分 std::unique_lock
的对象会以独占所有权(没有其他的 unique_lock 对象同时拥有某个 mutex 对象的所有权)的方式管理 mutex 对象上的上锁和解锁的操作。