logo资料库

c++11无锁队列的一种简单实现.pptx

第1页 / 共11页
第2页 / 共11页
第3页 / 共11页
第4页 / 共11页
第5页 / 共11页
第6页 / 共11页
第7页 / 共11页
第8页 / 共11页
资料共11页,剩余部分请下载后查看
C++11无锁队列的 一种简单实现
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, 以及其他的 类型和函数;
:该头文件主要声明了与条件变量相关的类, 包括 std::condition_variable 和 std::condition_variable_any; • :该头文件主要声明了 std::promise, std::package_task 两个 Provider 类,以及 std::future 和 std::shared_future 两个 Future 类,另外还有一些与之相关的类型和函数,std::async() 函 数就声明在此头文件中;
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多线程内存模型帮助我们在易编程性和性能之间取得了一 个平衡;
分享到:
收藏