C++11提供了对原子性和多线程的支持。主要包含以下五个头文件:<thread>, <mutex>, <condition_variable>, <future>和<atomic>。
<thread>:生成单个可执行线程,可以在多线程环境中与其他线程并发执行,同时共享相同的地址空间。主要包含两个内容:std:thread 类和 std:this_thread 命名空间。详细介绍见 C++11多线程:thread头文件
<mutex>:提供了多种互斥操作,可以显式避免数据竞争。主要包含 mutex类型、lock类型 以及 功能函数。详细介绍见 C++11多线程:mutex头文件
<condition_variable>:在特定情况下阻塞线程,直到收到通知重新运行线程,该过程是通过 unique_lock<mutex> 实现的。主要包含了与条件变量相关的功能类:condition_variable 和 condition_variable_any;枚举类:cv_status;以及功能函数 notify_all_at_thread_exit。详细介绍见 C++11多线程:condition_variable头文件
<future>:通过特殊的 provider 进行数据的异步访问,实现线程间的通信。这些 provider(无论是 promise 还是 packaged_task 对象,亦或是对 async 的调用)与 future 对象共享一个共享状态(share state)。详细介绍见 C++11多线程:future头文件
<atomic>:原子类型是对数据的一种封装,可以防止数据竞争,同步多线程间的内存访问。主要包含两个类:atomic 和 atomic_flag,可以在自包含类中实现原子类型的所有特性。同时头文件还声明了一组与C语言原子支持兼容的C风格类型和函数。详细介绍见 C++11多线程:atomic头文件