C++11多线程
• C++11 新标准中引入了四个头文件来支持多线程编程,他们分别
是
,,,和;
• :该头文件主要声明了 std::thread 类,另外
std::this_thread 命名空间也在该头文件中;
• :该头文主要声明了两个类, std::atomic 和
std::atomic_flag,另外还声明了一套 C 风格的原子类型和与 C 兼
容的原子操作的函数;
• :该头文件主要声明了与互斥量(mutex)相关的类,包括
std::mutex 系列类,std::lock_guard, std::unique_lock, 以及其他的
类型和函数;
C++11原子操作
• 原子操作是在多线程程序中“最小的且不可并行化的”操作,意味
着多个线程访问同一个资源时,有且仅有一个线程能对资源进行
操作;
• 原子操作是平台相关的,原子类型能够实现原子操作是因为
C++11 对原子类型的操作进行了抽象,定义了统一的接口,并要
求编译器产生平台相关的原子操作的具体实现;
• 有一个比较特殊的原子类型是 atomic_flag,因为 atomic_flag 与
其他原子类型不同,它是无锁(lock_free)的,即线程对其访问
不需要加锁,而其他的原子类型不一定是无锁的;
• atomic_flag 的成员函数test_and_set() 和 clear() 来实现一个自旋
锁(spin lock);
You and Your Research
• https://wenku.baidu.com/view/86ac6d2a294ac850ad02de80d4d8
d15abe2300a7.html
C++11内存模型
• 通常来说,内存模型表示机器指令是以什么样的顺序被处理器执行
的 (现代的处理器不是逐条处理机器指令的) ;
• C++11内存模型规定了多个线程访问同一个内存地址时的语义,
以及某个线程对内存地址的更新何时能被其它线程看见;
• C++11多线程内存模型帮助我们在易编程性和性能之间取得了一
个平衡;