线程详解
具体源码的大家有兴趣的可以去查看c++ 标准委员会的官方文档
在这里我主要讲一下他们的主要结构以及主要用法
< thread>
- std::thread 简单例子
|
|
< mutex>
std::mutex 是C++11 中最基本的互斥量,std::mutex 对象提供了独占所有权的特性——即不支持递归地对 std::mutex 对象上锁,而 std::recursive_lock 则可以递归地对互斥量对象上锁。
①. Mutex 系列类(四种)
- std::mutex,最基本的 Mutex 类。
- std::recursive_mutex,递归 Mutex 类。
- std::time_mutex,定时 Mutex 类。
- std::recursive_timed_mutex,定时递归 Mutex 类
②. Lock 类(两种)
- std::lock_guard,与 Mutex RAII (资源获取即初始化)相关,方便线程对互斥量上锁。
- std::unique_lock,与 Mutex RAII (资源获取即初始化)相关,方便线程对互斥量上锁,但提供了更好的上锁和解锁控制。
< condition_variable>
< condition_variable > 头文件主要包含了与条件变量相关的类和函数。与条件变量相关的类包括 std::condition_variable 和 std::condition_variable_any,还有枚举类型std::cv_status。另外还包括函数 std::notify_all_at_thread_exit()
在 Linux 下是使用 Pthread 库中的 pthreadcond*() 函数来实现条件变量相关的功能
< future>
C++11 标准中与异步任务系相关的类型主要是以下四种 std::promise,std::packaged_task(std::promise,std::packaged_task 也称为异步任务的提供者 Provider,此外 std::async 也可以作为异步任务的提供者,不过 std::async 并不是类,而是函数,本章后面会详细介绍异步任务的提供者 Provider),std::future,std::shared_future。另外 < future> 中还定义一些辅助的类,例如: std::future_error,std::future_errc,std::status,std::launch。
之前也有提到,主要是用来实现异步
< atomic>
关于C++11的原子操作之前我有过笔记,下图
好了,关于 C++11 的新特性大致的梳理了一遍,接下来我们先看看之前提到的那个 C++11 的线程池具体是怎么实现的吧