C++11 新标准中引入了五个头文件来支持多线程编程,它们分别是 <atomic>, <thread>, <mutex>, <condition_variable><future>

  • <thread>:该头文件主要声明了 std::thread 类,另外 std::this_thread 命名空间也在该头文件中。

  • <mutex>:该头文件主要声明了与互斥量(Mutex)相关的类,包括 std::mutex_* 一系列类,std::lock_guard, std::unique_lock, 以及其他的类型和函数。

  • <condition_variable>:该头文件主要声明了与条件变量相关的类,包括 std::condition_variablestd::condition_variable_any

  • <future>:该头文件主要声明了 std::promise, std::package_task 两个 Provider 类,以及 std::futurestd::shared_future 两个 Future 类,另外还有一些与之相关的类型和函数,std::async() 函数就声明在此头文件中。

    • <future> 头文件中包含了以下几个类和函数:

      • Providers 类:std::promise, std::package_task

      • Futures 类:std::future, std::shared_future

      • Providers 函数:std::async()

      • 其他类型:std::future_error, std::future_errc, std::future_status, std::launch

1
2
3
4
5
6
// 初始化时该 std::future 对象处于为 invalid 状态.
std::future<int> foo, bar;
// move 赋值, foo 变为 valid.
foo = std::async(do_get_value);
// move 赋值, bar 变为 valid, 而 move 赋值以后 foo 变为 invalid.
bar = std::move(foo);
  • <atomic>:该头文主要声明了两个类, std::atomicstd::atomic_flag,另外还声明了一套 C 风格的原子类型和与 C 兼容的原子操作的函数。