
多线程
文章平均质量分 84
douzhq
这个作者很懒,什么都没留下…
展开
-
QtConcurrent多线程 - map、mapped和mappedReduced
文章目录1. map 和 mapped2. mappedReduced3. 其他扩展Qt中的 Concurrent 模块为我们提供了在一个序列容器类型针对每一个元素的多线程并行运算,比如 QList 、 QVector 。QtConcurrent::map() :对序列的每一项元素都应用一个函数,并将运算结果替换原来的元素。QtConcurrent::mapped() :功能类似 ma...原创 2020-03-09 22:32:10 · 5269 阅读 · 1 评论 -
使用QWaitCondition实现一个简单的线程池
上篇文章主要讲了线程池的使用Qt中的线程池QThreadPool本篇文章使用Qt的条件变量 QWaitCondition ,实现一个简单的线程池关于 QWaitCondition 的使用,可以参照 线程的互斥和同步(7)- Qt的条件变量QWaitCondition先来说一下简单的思路,线程池初始化时创建一定数量的线程(8个) ,所有的线程处于挂起状态。当任务添加到列表时,唤醒一个线程执...原创 2020-03-06 22:21:45 · 641 阅读 · 1 评论 -
QtConcurrent多线程 - run()与QFuture
文章目录1. run()函数2. QFuture3. QFutureWatcherQt中的 Concurrent 模块,为我们提供高级的(high-level)API 编写多线程程序,而不用使用低级的(low-level)线程元语(如互斥锁、读写锁、信号量、条件变量等)。使用的时候需要在.pro文件中添加 concurrent 模块QT += concurrent我们首先来介绍一下 Q...原创 2020-03-06 00:10:25 · 10845 阅读 · 1 评论 -
线程的互斥和同步(9)- Qt中的读写锁QReadWriteLock
Qt中提供了 QReadWriteLock 类,我们可以方便的使用读写锁。读写锁 是指 读锁 和 写锁 。适用于多个线程读操作比较频繁,而写操作不频繁的场景中。它能够保证多个线程读操作访问资源时同时进行,而写入操作时阻塞读操作。也就是我们常说的,读共享 和 写独占 。1. 读共享和写独占读共享 :当其他线程占用读锁的时候,如果其他线程请求读锁,会立即获得。当其他线程占用读锁的时候,...原创 2020-02-27 21:27:09 · 3045 阅读 · 1 评论 -
Qt中的线程池QThreadPool
线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线程都是后台线程。每个线程都使用默认的堆栈大小,以默认的优先级运行,并处于多线程单元中。如果某个线程在托管代码中空闲(如正在等待某个事件),则线程池将插入另一个辅助线程来使所有处理器保持繁忙。如果所有线程池线程都始终保持繁忙,但队列中包含挂起的工作,则线程池将在一段时间后创建另一个辅助线程但线程的数目永...原创 2020-02-26 22:50:41 · 13673 阅读 · 2 评论 -
线程的互斥和同步(8)- C++11中的互斥锁和条件变量
文章目录1. 互斥锁(1) 递归锁和非递归锁(2) 互斥锁管理类2. std::condition_variable1. 互斥锁之前讲过使用Windows的API和Qt中如何创建和使用互斥锁。接下来,主要说明一下C++11中的互斥锁。c++11中的互斥锁主要有如下几种:互斥锁说明mutex最基本的互斥锁,不可重入timed_mutex具有超时机制的互斥锁...原创 2020-02-23 20:34:46 · 909 阅读 · 0 评论 -
线程的互斥和同步(7)- Qt的条件变量QWaitCondition
QWaitCondition 提供了一个用于同步线程的条件变量。它允许一个线程后告诉其他的线程已经满足了某种条件;一个或多个线程可以阻塞等待 QWaitCondition 来使用 wakeOne() 或 wakeAll() 设置条件。使用 wakeOne() 唤醒一个随机选择的线程或者 wakeAll() 唤醒全部等待的线程。下面是 QWaitCondition 类中,常用的函数介绍:bo...原创 2020-02-23 13:09:54 · 2120 阅读 · 1 评论 -
线程的互斥和同步(6)- Qt的信号量QSemaphore
上一篇文章主要介绍了使用Windows API创建和使用信号量Semaphore线程的互斥和同步(5)- Windows的信号量Semaphore本篇文章只要介绍Qt的信号量 QSemaphore 类的使用,并用一个 生产者-消费者 实例来说明信号量是如何提高多线程的效率的。下面是使用类 QSemaphore 常用的函数:void acquire (int n = 1); 表示请求n...原创 2020-02-20 20:59:10 · 1832 阅读 · 1 评论 -
线程的互斥和同步(5)- Windows的信号量Semaphore
信号量也是进程间同步常用的手段之一。举个例子,比如我们要去餐馆吃饭,这家餐馆一共有4个位置,我们一共是6个人。那么就会4个人先去吃饭,等他们吃完了,剩下的2个人再去吃饭,如果再来人则需要判断是否有空位置,如果有直接坐下吃饭,如果没有则需要等待。这里的每一个顾客就相当于一个线程,而通知你排队叫号进餐的那个服务员就是我们的信号量。信号量可以有效的保证我们多个线程并发执行。对于信号量,我们经常使用的...原创 2020-02-19 21:31:38 · 1197 阅读 · 0 评论 -
线程的互斥和同步(4)- Qt中的互斥锁(QMutex和QMutexLocker)
上一篇文章主要介绍了Windows的互斥锁线程的互斥和同步(3)- Windows的互斥锁Linux也有自己API来操作互斥锁,对于跨平台的操作,Qt帮助我们使用一套代码实现相同的效果。Qt中使用类 QMutex 和 QMutexLocker 来实现和管理互斥锁。类 QMutex 的主要函数有:lock (); 加锁,如果该互斥锁被占用,该函数阻塞,直到互斥锁被释放。u...原创 2020-02-17 21:30:35 · 1874 阅读 · 1 评论 -
线程的互斥和同步(3)- Windows的互斥锁
什么是互斥锁/互斥量?在编程中,引入了对象互斥锁的概念,来保证共享数据操作的完整性。每个对象都对应于一个可称为" 互斥锁" 的标记,这个标记用来保证在任一时刻,只能有一个线程访问该对象;选自百度百科-互斥锁。同一时刻只有一个线程访问互斥锁,如果其他线程请求占用该互斥锁时,该请求锁的线程会被挂起。直到锁的拥有者释放该互斥锁,CPU调度到请求锁的线程占有该互斥锁,该线程被唤醒。Windows中...原创 2020-02-17 00:06:09 · 1277 阅读 · 1 评论 -
线程的互斥和同步(2)- Windows的临界区
临界区是指程序中的多个线程访问同一个受保护的代码段,临界区的代码段同一时刻只允许一个线程执行。使用临界区对象 CriticalSection ,来实现对临界区的操作。下面是一些过于临界区操作的主要函数:InitializeCriticalSection (LPCRITICAL_SECTION lpCriticalSection); 初始化临界区对象DeleteCriticalSecti...原创 2020-02-09 16:23:28 · 629 阅读 · 1 评论 -
线程的互斥和同步(1)- 原子操作与自旋锁
文章目录1. 使用Windows API实现原子操作2. 使用C++11提供的原子对象实现原子操作3. 使用atmoic_flag实现自旋锁在进行多线程编成的时候,我们经常会遇到线程的互斥与同步问题。比如多个线程访问同一个变量,需要互斥的操作,一个线程需要等待另一个线程处理后再进行接下来的操作等等。接下来我们看一下线程的互斥,原子操作。原子操作 ,是多线程程序中 “最小的且不可并行化的” ...原创 2020-02-05 16:32:21 · 1084 阅读 · 1 评论 -
使用Windows API实现自定义线程类CThread
我们在使用QThread的时候,只需要继承QThread重新实现 run() 函数就可以了,使用起来很方便,接下来就介绍一种实现自定义的类 CThread ,只要继承 CThread 后,重新实现 run() 函数即可。关于 QThread 的使用可以参见 使用Qt中的QThread创建线程或者访问我的 个人博客主页 http://www.douzhq.cn ,导航栏中点击多线程,然后也可以...原创 2020-02-04 18:44:36 · 1126 阅读 · 1 评论 -
使用Qt中的QThread创建线程
文章目录1. 使用信号和槽的形式触发2. 使用继承自QThread方式触发3. 几点说明上篇文章中简单介绍了如何使用 Windows API 和c++11中的 std::thread 创建线程。线程的创建和基本使用本篇文章将会介绍如何使用QThread创建线程。QThread是Qt所有线程控制的基础,每一个QThread实例对象控制一个线程。QThread可以直接实例化使用也可以用...原创 2020-02-03 17:13:22 · 4679 阅读 · 1 评论 -
线程的创建和基本使用
文章目录1. 什么是线程? 为什么要用多线程?2. 线程的创建和使用(1) 使用操作系统API创建(2) 使用C++11创建(3) c++11线程ID的获取1. 什么是线程? 为什么要用多线程?线程,是操作系统能够运行和计算和调度的最小单位。一个进程至少要包含一个线程,线程要包含在进程中,是进程实际运作单位。一个进程中可以多有个线程,每个线程并发执行。每个线程有独立的栈空间,线程之间共享静...原创 2020-02-01 22:25:06 · 972 阅读 · 0 评论