![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c++ 11
老衲不出家
寨都码农一枚,平常喜欢关注音视频技术,从事音视频行业小几年,主要是音视频编解码,语音处理,移动端音视频开发,博客是一个自我记录的地方,如果不妥之处,请高人不吝赐教,如有侵权,请联系我删除。tanningzhong@126.com
展开
-
C++11 并发指南一(C++11 多线程初探)
引言C++11 自2011年发布以来已经快两年了,之前一直没怎么关注,直到最近几个月才看了一些 C++11 的新特性,今后几篇博客我都会写一些关于 C++11 的特性,算是记录一下自己学到的东西吧,和大家共勉。相信 Linux 程序员都用过 Pthread, 但有了 C++11 的 std::thread 以后,你可以在语言层面编写多线程程序了,直接的好处就是多线程程序的可移植性得转载 2017-09-26 09:56:29 · 526 阅读 · 0 评论 -
c++11 yield
yield: 当前线程放弃执行,操作系统调度另一线程继续执行。 比如说你的线程需要等待某个操作完成,如果你直接用一个循环不断判断这个操作是否完成就会使得这个线程占满CPU时间,这会造成资源浪费。这时候你可以判断一次操作是否完成,如果没有完成就调用yield交出时间片,过一会儿再来判断是否完成,这样这个线程占用CPU时间会大大减少。举例: while(!isDone(原创 2017-10-16 11:59:59 · 2761 阅读 · 0 评论 -
【C++11新特性】 C++11智能指针之weak_ptr
1、为什么需要weak_ptr?在正式介绍weak_ptr之前,我们先来回忆一下shared_ptr的一些知识。我们知道shared_ptr是采用引用计数的智能指针,多个shared_ptr实例可以指向同一个动态对象,并维护了一个共享的引用计数器。对于引用计数法实现的计数,总是避免不了循环引用(或环形引用)的问题,shared_ptr也不例外。我们先来看看下面这个例子:#inc转载 2017-10-18 10:02:07 · 582 阅读 · 0 评论 -
【C++11新特性】 C++11智能指针之shared_ptr
C++中的智能指针首先出现在“准”标准库boost中。随着使用的人越来越多,为了让开发人员更方便、更安全的使用动态内存,C++11也引入了智能指针来管理动态对象。在新标准中,主要提供了shared_ptr、unique_ptr、weak_ptr三种不同类型的智能指针。接下来的几篇文章,我们就来总结一下这些智能指针的使用。今天,我们先来看看shared_ptr智能指针。share转载 2017-10-18 09:56:46 · 236 阅读 · 0 评论 -
C++11 并发指南六(atomic 类型详解三 std::atomic (续))
总地来说,C++11 标准库中的 std::atomic 针对整形(integral)和指针类型的特化版本新增了一些算术运算和逻辑运算操作。具体如下:integral fetch_add(integral, memory_order = memory_order_seq_cst) volatile;integral fetch_add(integ转载 2017-09-26 14:14:26 · 1427 阅读 · 0 评论 -
C++11 并发指南六(atomic 类型详解四 C 风格原子操作介绍)
总地来说,C++11 标准中规定了两大类原子对象,std::atomic_flag 和 std::atomic,前者 std::atomic_flag 一种最简单的原子布尔类型,只支持两种操作,test-and-set 和 clear。而 std::atomic 是模板类,一个模板类型为 T 的原子对象中封装了一个类型为 T 的值,并且C++11 标准中除了定义基本 std::atomic 模板类转载 2017-09-26 14:17:49 · 654 阅读 · 0 评论 -
C++11 并发指南七(C++11 内存模型一:介绍)
第六章主要介绍了 C++11 中的原子类型及其相关的API,原子类型的大多数 API 都需要程序员提供一个 std::memory_order(可译为内存序,访存顺序) 的枚举类型值作为参数,比如:atomic_store,atomic_load,atomic_exchange,atomic_compare_exchange 等 API 的最后一个形参为 std::memory_order o转载 2017-09-26 14:21:48 · 253 阅读 · 0 评论 -
C++11 并发指南九(综合运用: C++11 多线程下生产者消费者模型详解)
前面八章介绍了 C++11 并发编程的基础(抱歉哈,第五章-第八章还在草稿中),本文将综合运用 C++11 中的新的基础设施(主要是多线程、锁、条件变量)来阐述一个经典问题——生产者消费者模型,并给出完整的解决方案。生产者消费者问题是多线程并发中一个非常经典的问题,相信学过操作系统课程的同学都清楚这个问题的根源。本文将就四种情况分析并介绍生产者和消费者问题,它们分别是:单生产者-单消费者模转载 2017-09-26 14:23:33 · 241 阅读 · 0 评论 -
C++11 并发指南六( <atomic> 类型详解二 std::atomic )
std::atomic 基本介绍std::atomic 是模板类,一个模板类型为 T 的原子对象中封装了一个类型为 T 的值。template class T> struct atomic;原子类型对象的主要特点就是从不同线程访问不会导致数据竞争(data race)。因此从不同线程访问某个原子对象是良性 (well-defined) 行为,而通常对于非原子类型而言,并转载 2017-09-26 11:56:31 · 5019 阅读 · 0 评论 -
C++11 并发指南六(atomic 类型详解一 atomic_flag 介绍)
C++11 并发指南已经写了 5 章,前五章重点介绍了多线程编程方面的内容,但大部分内容只涉及多线程、互斥量、条件变量和异步编程相关的 API,C++11 程序员完全可以不必知道这些 API 在底层是如何实现的,只需要清楚 C++11 多线程和异步编程相关 API 的语义,然后熟加练习即可应付大部分多线程编码需求。但是在很多极端的场合下为了性能和效率,我们需要开发一些 lock-free 的算法和转载 2017-09-26 11:42:26 · 1177 阅读 · 0 评论 -
C++11 并发指南五(std::condition_variable 详解)
头文件主要包含了与条件变量相关的类和函数。相关的类包括 std::condition_variable 和 std::condition_variable_any,还有枚举类型std::cv_status。另外还包括函数 std::notify_all_at_thread_exit(),下面分别介绍一下以上几种类型。std::condition_variable 类介绍std::c转载 2017-09-26 11:28:05 · 502 阅读 · 0 评论 -
C++11 并发指南四(<future> 详解三 std::future & std::shared_future)
本文主要介绍 std::future,std::shared_future 以及 std::future_error,另外还会介绍 头文件中的 std::async,std::future_category 函数以及相关枚举类型。std::future 介绍前面已经多次提到过 std::future,那么 std::future 究竟是什么呢?简单地说,std::future 可转载 2017-09-26 11:21:13 · 552 阅读 · 0 评论 -
C++11 并发指南四(<future> 详解二 std::packaged_task 介绍)
std::packaged_task 包装一个可调用的对象,并且允许异步获取该可调用对象产生的结果,从包装可调用对象意义上来讲,std::packaged_task 与 std::function 类似,只不过 std::packaged_task 将其包装的可调用对象的执行结果传递给一个 std::future 对象(该对象通常在另外一个线程中获取 std::packaged_task 任务的执转载 2017-09-26 11:07:16 · 406 阅读 · 0 评论 -
C++11 并发指南四(<future> 详解一 std::promise 介绍)
头文件中包含了以下几个类和函数:Providers 类:std::promise, std::package_taskFutures 类:std::future, shared_future.Providers 函数:std::async()其他类型:std::future_error, std::future_errc, std::future_status, std::launch.转载 2017-09-26 10:59:38 · 841 阅读 · 0 评论 -
C++11 并发指南三(Lock 详解)
在 《C++11 并发指南三(std::mutex 详解)》一文中我们主要介绍了 C++11 标准中的互斥量(Mutex),并简单介绍了一下两种锁类型。本节将详细介绍一下 C++11 标准的锁类型。C++11 标准为我们提供了两种基本的锁类型,分别如下:std::lock_guard,与 Mutex RAII 相关,方便线程对互斥量上锁。std::unique_lock,与 M转载 2017-09-26 10:22:39 · 325 阅读 · 0 评论 -
C++11 并发指南三(std::mutex 详解)
上一篇《C++11 并发指南二(std::thread 详解)》中主要讲到了 std::thread 的一些用法,并给出了两个小例子,本文将介绍 std::mutex 的用法。Mutex 又称互斥量,C++ 11中与 Mutex 相关的类(包括锁类型)和函数都声明在 头文件中,所以如果你需要使用 std::mutex,就必须包含 头文件。 头文件介绍Mutex 系列转载 2017-09-26 10:05:45 · 278 阅读 · 0 评论 -
C++11 并发指南二(std::thread 详解)
上一篇博客《C++11 并发指南一(C++11 多线程初探)》中只是提到了 std::thread 的基本用法,并给出了一个最简单的例子,本文将稍微详细地介绍 std::thread 的用法。std::thread 在 头文件中声明,因此使用 std::thread 时需要包含 头文件。std::thread 构造default (1)thread(转载 2017-09-26 10:00:40 · 276 阅读 · 0 评论 -
条件变量 深入理解总结(C++ 11 中的并发库 为例)
理解条件变量条件变量可以用来管理thread间的通信。一个线程可以等待在一个条件变量上,直到发生某个事件。考虑一个场景,一个线程访问一个队列时,发现队列为空,他只能等待 直到其他线程将一个节点添加到队列中。这种情况就需要用到条件变量。(当然,用低效的轮询也可以,不停的去判断队列中是否有节点)C++11 标准库提供的 condition_variable 概览condition_vari...原创 2018-10-24 15:35:07 · 728 阅读 · 0 评论