![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++并发与多线程
Cbee
学而不思则罔,思而不学则殆。
展开
-
C++并发与多线程-线程之间传递任务
线程之间传递回调函数或者任务的一种方法是使用std::packaged_task封装可调用对象,然后将std::packaged_task对象放入公共容器里面,然后被调用任务的线程持到std::packaged_task里面的future对象,当需要数据的时候调用future对象的get()或wait()方法即可阻塞并等待。执行任务的线程执行完可调用对象之后,该future就变为可获...原创 2020-02-02 23:52:48 · 661 阅读 · 0 评论 -
C++并发与多线程-使用读写锁
使用读写锁的好处是所有的读操作都能同时进行,而写操作需要独占互斥量。这样能保证读操作不会相互阻塞等待。而他们的共同竞争者是那些独占互斥量的写操作。标准模板库中提供了std::shared_lock(共享锁)和std::shared_mutex(共享互斥量)。而阅读源码可以看到,shared_lock再构造的时候其实调用互斥量的lock_shared()函数。template<class...原创 2020-01-14 00:10:54 · 1302 阅读 · 0 评论 -
C++并发与多线程-使用层次锁防止死锁
为防止死锁,其中一种简单的办法是顺序的加锁。而使用层次锁可以减轻程序员的负担,检查运行时是否遵循了约定。其思路是将应用程序分层,当代码试图锁定一个互斥元的时候检查当前线程是不是已经有一个比较低级的互斥元在锁的状态了。因此锁的顺序只能先锁层级高的锁再锁层级低的锁。//hierarchical_mutex.h文件#pragma once#include <mutex&g...原创 2020-01-12 20:08:47 · 1483 阅读 · 0 评论 -
C++并发与多线程-运行时选择线程数量
使用std::thread::hardware_concurrency() 来获得当前系统可以真正并发的线程数量,和cpu的核心数有关。#include <iostream>#include <thread>#include <numeric>#include <vector>#include <algorithm>#in...原创 2020-01-07 00:46:24 · 1383 阅读 · 0 评论