C++ 并发
文章平均质量分 65
小丑快学习
这个作者很懒,什么都没留下…
展开
-
C++线程池
线程池1.任务队列2.可窃取任务的队列3.线程池的实现4.线程销毁代码来自 <<c++ Concurence in Action>>所谓线程池,就是一个由多个线程组成的数组或者队列,在相应的队列中不断取出任务进行执行。将多个线程此存放于一个数组中可以减少不断地产生和销毁线程带来的开销。下面便是一个由c++实现的线程池。更多的细节请参阅相关书籍。1.任务队列任务队列就是就是一个共享的队列,其需要实现线程的安全的访问,并且不能在访问时产生死锁。线程安全的队列可以参考文章:线程安原创 2021-06-02 10:56:29 · 3100 阅读 · 1 评论 -
C++并发编程----异常安全的并行算法(《C++ Concurrency in Action》 读书笔记)
1.accumulate//仿函数template<typename Iterator, typename T>struct accumulate_block{ void operator()(Iterator first, Iterator last, T& result) { result = std::accumulate(first, last, result); // 1 }};template<typename I原创 2021-05-17 16:05:59 · 300 阅读 · 0 评论 -
C++并发编程----并发代码的设计(《C++ Concurrency in Action》 读书笔记)
线程间的工作划分数据划分:第一组N个元素分配一个线程,下一组N个元素再分配一个线程,以快速排序为例,以此类 推:一项任务被分割成多个,放入一个并行任务集中,执行线程独立的执行这些任务,结果在会有主线 程中合并。递归划分一般来说每次递归产生一个新的进程对数据进行划分并处理操作,这样每递归一次,线程的数量将会翻一倍,线程数量将会呈现指数级的增长,但是当大量的线程产生时,将会导致大量时间和资源用于线程切换,因而导致程序的指向效果很差。一般会通过使用 std::thread::hardware_con原创 2021-05-11 17:34:38 · 209 阅读 · 0 评论 -
C++并发编程----无锁实现线程安全队列(《C++ Concurrency in Action》 读书笔记)
采用计数器的方式防止条件竞争。template<typename T>class lock_free_queue{private: struct node; struct counted_node_ptr { int external_count;//记录外部线程通过指针的引用 node* ptr; }; std::atomic<counted_node_ptr> head; std::atomi原创 2021-05-10 17:22:50 · 1194 阅读 · 5 评论 -
C++并发编程----实现线无锁线程安全的数据结构(《C++ Concurrency in Action》 读书笔记)
无锁线程安全的栈template<typename T>class lock_free_stack{private: struct node { std::shared_ptr<T> data; // 1 指针获取数据 node* next; node(T const& data_) : data(std::make_shared<T>(data_))原创 2021-05-07 15:32:50 · 620 阅读 · 0 评论 -
C++并发编程----利用锁实现线程安全的数据结构(《C++ Concurrency in Action》 读书笔记)
好原创 2021-05-01 10:22:45 · 727 阅读 · 0 评论 -
C++并发编程----原子类型(《C++ Concurrency in Action》 读书笔记)
文章目录std::atomic的相关操作本文为《C++ Concurrency in Action》 读书笔记,对其中的一些知识点进行总结。阅读这本书前建议先阅读《Effective C++》原子类型或者说是原子操作,在操作系统的学习中我们已经很熟悉了,原子操作可以保证一个操作的完整性,即要做完,要么不做,对于原子操作,其相应的操作顺序或者访问内存顺序一般是确定了的,因此一般原子操作不会引起数据竞争,C++中的原子操作有很多,还可以用模板将自定义的操作设置为原子操作。有的原子操作其实现方式用锁,而有的实原创 2021-04-28 20:41:07 · 853 阅读 · 1 评论 -
C++并发编程----同步操作(《C++ Concurrency in Action》 读书笔记)
文章目录使用同步操作简化代码使用“期望”的函数化编程本文为《C++ Concurrency in Action》 读书笔记,对其中的一些知识点进行总结。阅读这本书前建议先阅读《Effective C++》使用同步操作简化代码使用“期望”的函数化编程术语函数化编程(functional programming)引用于一种编程方式,这种方式中的函数结果只依 赖于传入函数的参数,并不依赖外部状态。快速排序 FP(函数化)模式版以下是对于快速排序的单线程实现方式:template<typena原创 2021-04-25 16:58:09 · 198 阅读 · 1 评论 -
C++并发编程----并发和同步(《C++ Concurrency in Action》 读书笔记)
文章目录条件变量构建线程安全队列std::future< > 、 std::shared_future< >本文为《C++ Concurrency in Action》 读书笔记,对其中的一些知识点进行总结。阅读这本书前建议先阅读《Effective C++》条件变量std::condition_variable 和 std::condition_variable_any 。这两个实现都包含 在 < condition_variable > 头文件的声明中。两者都原创 2021-04-25 15:31:07 · 204 阅读 · 0 评论 -
C++并发编程----共享数据(《C++ Concurrency in Action》 读书笔记)
学习过操作系统我们应该知道对于共享数据的访问,以及同步和异步数据的操作。在多线程的编程中,我们需要小心对共享数据的使用。原创 2021-04-24 14:41:18 · 254 阅读 · 0 评论 -
C++并发编程---线程的管理(《C++ Concurrency in Action》读书笔记)
《C++并发编程》(C++ Concurrency in Action)读书笔记这本书中用到很多的高级用法,如RAII等手法,因此,看这本书之前建议先阅读《Effective c++》1.线程的启动、等待、分离。启动C++中的线程的启动方式和Linux中的启动方式相似,但是启动参数减少了很多。仅需传入线程初始化函数(可调用对象),以及相应的参数即可。class background_task { public: void operator()() const { do_somethin原创 2021-04-22 17:18:55 · 231 阅读 · 0 评论