c++并发编程实战
Watson2016
游戏,c++,机器视觉,嵌入式,后台开发
展开
-
使用细粒度锁的c++线程安全队列
使用细粒度锁的c++线程安全队列实现:#include#include#include#includetemplateclass threadsafe_queue{private: struct node { std::shared_ptr data; std::unique_ptr next; }; std::unique_ptr head; node* tai原创 2016-10-17 10:44:12 · 1776 阅读 · 0 评论 -
C++11 并发指南八(综合运用: C++11 多线程下生产者消费者模型详解)
C++11 并发指南九(综合运用: C++11 多线程下生产者消费者模型详解)前面八章介绍了 C++11 并发编程的基础(抱歉哈,第五章-第八章还在草稿中),本文将综合运用 C++11 中的新的基础设施(主要是多线程、锁、条件变量)来阐述一个经典问题——生产者消费者模型,并给出完整的解决方案。生产者消费者问题是多线程并发中一个非常经典的问题,相信学过操作系统课程的同学都清楚转载 2016-10-19 20:42:15 · 704 阅读 · 0 评论 -
C++11 并发指南六( <atomic> 类型详解二 std::atomic )
C++11 并发指南六( 类型详解二 std::atomic )C++11 并发指南六(atomic 类型详解一 atomic_flag 介绍) 一文介绍了 C++11 中最简单的原子类型 std::atomic_flag,但是 std::atomic_flag 过于简单,只提供了 test_and_set 和 clear 两个 API,不能满足其他需求(如 store转载 2016-10-19 20:33:33 · 3327 阅读 · 0 评论 -
C++11 并发指南六(atomic 类型详解一 atomic_flag 介绍)
C++11 并发指南六(atomic 类型详解一 atomic_flag 介绍)C++11 并发指南已经写了 5 章,前五章重点介绍了多线程编程方面的内容,但大部分内容只涉及多线程、互斥量、条件变量和异步编程相关的 API,C++11 程序员完全可以不必知道这些 API 在底层是如何实现的,只需要清楚 C++11 多线程和异步编程相关 API 的语义,然后熟加练习即可应付大部分转载 2016-10-19 17:47:04 · 3494 阅读 · 0 评论 -
std::accumulate异常安全的两个并行版本
为了避免异常发生而导致的内存泄漏通常有两种方法解决:1、采用try 和catch2、在一个对象的析构函数中检测,线程是否join。(毕竟这是C++中惯用的清除资源方法)本文主要实现第二种:class join_threads{ std::vector& threads;public: explicit join_threads(std::vector& threads_): t原创 2016-10-19 17:23:38 · 787 阅读 · 0 评论 -
C++11 并发指南五(std::condition_variable 详解)
C++11 并发指南五(std::condition_variable 详解)前面三讲《C++11 并发指南二(std::thread 详解)》,《C++11 并发指南三(std::mutex 详解)》分别介绍了 std::thread,std::mutex,std::future 等相关内容,相信读者对 C++11 中的多线程编程有了一个最基本的认识,本文将介绍 C+转载 2016-10-19 16:57:13 · 10566 阅读 · 1 评论 -
C++11 并发指南四(<future> 详解三 std::future & std::shared_future)
C++11 并发指南四( 详解三 std::future & std::shared_future)上一讲《C++11 并发指南四( 详解二 std::packaged_task 介绍)》主要介绍了 头文件中的 std::packaged_task 类,本文主要介绍 std::future,std::shared_future 以及 std::future_error,另转载 2016-10-19 16:36:22 · 5170 阅读 · 0 评论 -
C++11并发编程指南四(<future> 详解二 std::packaged_task 介绍)
上一讲《C++11 并发指南四( 详解一 std::promise 介绍)》主要介绍了 头文件中的 std::promise 类,本文主要介绍 std::packaged_task。std::packaged_task 包装一个可调用的对象,并且允许异步获取该可调用对象产生的结果,从包装可调用对象意义上来讲,std::packaged_task 与 std::function 类似,转载 2016-10-19 15:59:17 · 1396 阅读 · 0 评论 -
c++11并发编程指南四(std::future std::promise详解)
前面两讲《C++11 并发指南二(std::thread 详解)》,《C++11 并发指南三(std::mutex 详解)》分别介绍了 std::thread 和 std::mutex,相信读者对 C++11 中的多线程编程有了一个最基本的认识,本文将介绍 C++11 标准中 头文件里面的类和相关函数。 头文件中包含了以下几个类和函数:Providers 类:std::pro转载 2016-10-19 15:45:32 · 2197 阅读 · 1 评论 -
c++11并发编程指南三(std::mutex 详解)
上一篇《C++11 并发指南二(std::thread 详解)》中主要讲到了 std::thread 的一些用法,并给出了两个小例子,本文将介绍 std::mutex 的用法。Mutex 又称互斥量,C++ 11中与 Mutex 相关的类(包括锁类型)和函数都声明在 头文件中,所以如果你需要使用 std::mutex,就必须包含 头文件。 头文件介绍Mutex 系列转载 2016-10-19 15:44:02 · 1358 阅读 · 1 评论 -
c++并发编程指南二:<tread>头文件
上一篇博客《C++11 并发指南一(C++11 多线程初探)》中只是提到了 std::thread 的基本用法,并给出了一个最简单的例子,本文将稍微详细地介绍 std::thread 的用法。std::thread 在 头文件中声明,因此使用 std::thread 时需要包含 头文件。std::thread 构造default (1)thread(转载 2016-10-19 15:41:37 · 723 阅读 · 0 评论 -
c++并发编程指南一:引言
转载地址:http://www.cnblogs.com/haippy/p/3235560.html引言C++11 自2011年发布以来已经快两年了,之前一直没怎么关注,直到最近几个月才看了一些 C++11 的新特性,今后几篇博客我都会写一些关于 C++11 的特性,算是记录一下自己学到的东西吧,和大家共勉。相信 Linux 程序员都用过 Pthread, 但有了 C++11转载 2016-10-19 15:39:25 · 801 阅读 · 0 评论 -
c++并发编程:面试题-线程同步
是否熟悉POSIX多线程编程技术?如熟悉,编写程序完成如下功能:1)有一int型全局变量g_Flag初始值为0;2) 在主线称中起动线程1,打印“this is thread1”,并将g_Flag设置为13) 在主线称中启动线程2,打印“this is thread2”,并将g_Flag设置为24) 线程序1需要在线程2退出后才能退出5) 主线程在检测到g_原创 2016-10-18 10:48:10 · 4481 阅读 · 0 评论 -
使用future的并行快速排序
#include#include#include#include#include/* 非现场版本,使用函数式编程templatestd::list sequential_quick_sort(std::list input){ if (input.empty()) { return input; } std::list result; result.splice(原创 2016-10-18 09:41:08 · 575 阅读 · 0 评论 -
c++并发编程:迅雷笔试题
题目:编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。采用C++11实现:[cpp] view plain copy 在CODE上查看代码片派生到我的代码片#include #include #include #include using namespace原创 2016-10-17 21:11:46 · 1129 阅读 · 0 评论 -
使用锁的线性安全链表
/*使用锁第线性安全链表:功能如下:1、项链表添加新项目;2、从链表中删除满足一定条件的项目;3.在链表中查找满足一定条件的项目;4,更新满足一定条件的项目;4.复制链表中每个项目到两一个容器中;*/#include#include#includetemplateclass threadsafe_list{ struct node { std::sha原创 2016-10-17 15:44:44 · 742 阅读 · 0 评论 -
std::bind和std::function详解
std::function在看Cocos2d-x的范例代码时,随处可见“很奇怪”的语法:static std::functionLayer*()> createFunctions[] ={ CL(CameraTest1), //...};其中CL是一个宏,对应如下lambda表达式:#define CL(__className__) [](){ retu原创 2016-10-20 09:42:11 · 3198 阅读 · 0 评论