C++多线程并发编程入门(目录)
文章平均质量分 68
C++程序员Carea
十年一线开发经验,热爱 C++ ,热爱编程
展开
-
如何优雅的退出线程(condition_variable )
使用条件变量来实现在析构函数中再次向线程发出一次notify,之后join 线程,等等线程安全退出。原创 2023-09-22 15:53:30 · 266 阅读 · 0 评论 -
使用多线程std::thread发挥多核计算优势(解答)
可以预见,随着数据量的继续增大,这种平分区间的算法,会导致第二个线程完全占据计算量的大头。那就是我们已经验证了多线程多核在计算速度上的确是可以完胜单线程的,只要我们合理分配计算任务给多个线程。这是因为后面一个线程的计算量过大,两个线程的任务没有起到平分导致的。我们先用两个线程,把任务固定的分配给这两个线程,看看完成任务总的执行时间是不是变短了。正如我们预期,时间继续下降,尤其是数据量达到一亿的时候,总耗时再次变为了原来的一半。如果我们的电脑只有一个核,那么我们没有什么更好的办法可以让我们的程序更快。原创 2023-09-03 12:32:38 · 306 阅读 · 0 评论 -
使用多线程std::thread发挥多核计算优势(题目)
下面的作业是求某个数字以内的素数和。实现函数faster_test_the_sum_of_all_primes_within,就可以看出你重新实现的版本和基础版本相比较,程序是否在更短的时间运行出了正确的结果。验证求素数的函数 is_prime_number 是否正确。接下来开始实际计算某个数字以内的素数和,此时使用程序提供的默认版本test_the_sum_of_all_primes_within来计算。原创 2023-09-03 12:30:51 · 157 阅读 · 0 评论 -
C++极简内存泄露检测工具(34行代码实现)
如果有任何问题,欢迎随时与我交流。可以留言或者私信交流。祝你工作顺利!原创 2023-09-03 12:28:58 · 265 阅读 · 0 评论 -
两个线程同步执行:解决乱箭穿心(STL/Windows/Linux)condition_variable
例如,在音视频开发中,采集是源头,比如120HZ的视频,时间间隔是8.333ms,所有后续的编码线程,推流线程,等等,都需要在这有限的8.333毫秒之内完成自己的工作。一个发送线程先往控制台上打印1,这时候接收线程并不往控制台打印2,而是等待发送线程发给自己的信号,等到信号之后再打印2.每次发送线程打印完自己的数据之后,睡眠1毫秒,给接收线程时间来完成自己的工作。所以作为协调源头的线程1,应该给其他线程时间来处理问题,这是合理的。多个线程在协调工作的时候,每个线程都会需要时间来才能解决问题。原创 2023-09-03 12:25:30 · 495 阅读 · 0 评论 -
两个线程并发(乱序)执行:乱箭穿心 std::thread
创建2个线程并执行 中的技术,所以,我们就不再在这里写Windows 和Linux下面的版本了,想必你也可以轻松写出来。下面我们来看看两个线程同时往控制台打印信息,控制台会乱成什么样子。中,我们已经看到了多个线程执行的顺序是没有任何保证的。可以看出,两个线程没有先后顺序的,肆意妄为,乱打印一气。他们之间就是各自独立的同时在执行。由于本文用到的代码是前面。控制台窗口被乱箭穿心!原创 2023-09-03 12:20:22 · 204 阅读 · 0 评论 -
理解 std::thread::detach
从而变成了 detach 在启动的时候是以 detach 方式启动(不阻塞其他任何线程),同时 main 以代码的方式 等待(join)这个detach 线程。可以看到,由于 UI线程没有等待 record 线程,所以, record 是在 UI线程执行的过程中自己独立执行完成的。下面我们就来模拟 record 线程确实是比较慢,UI线程都被用户关闭窗口了,还没有把所有的录制数据写入到本地文件。中,我们看到了,如果所有线程都是一开始就在 main 函数中创建好的,那么只需要有一个 join 函数就足够了。原创 2023-09-03 12:14:43 · 374 阅读 · 0 评论 -
创建10个线程并发执行(STL/Windows/Linux)
【代码】创建10个线程并发执行(STL/Windows/Linux)原创 2023-09-03 12:07:18 · 699 阅读 · 0 评论 -
创建2个线程并执行(STL/Windows/Linux)
【代码】创建2个线程并执行(STL/Windows/Linux)原创 2023-09-03 12:03:27 · 494 阅读 · 0 评论 -
理解 std::thread::join
本文用最简单易懂的实际案例,讲清楚了 join 的实际内涵,保证你过目不忘。原创 2023-09-03 11:52:20 · 753 阅读 · 0 评论 -
单独创建一个线程并执行
用这个类创建的线程对象的时候,必须提供一个函数(或者仿函数functor)作为线程执行体。main函数退出了不得了,整个可执行程序也会被操作系统收回。这样,线程就不能得到完整的执行。述代码中的线程类 std::thread 是标准库自带的线程类,在C++11中开始提供。join是让main函数等待自己,等待线程thread1执行完了main函数再退出。thread1对象在构造的时候,接受一个普通的C函数作为执行体。如果不是这样的话,main函数执行完线程对象创建之后,这个独立是什么意思呢?原创 2023-09-03 11:42:14 · 285 阅读 · 0 评论 -
只有一个线程的程序(main函数)
这个线程无需我们手动创建,main函数就是这个线程的执行体。运行main函数,就是执行只有一个线程的程序。就是main函数所在的线程。原创 2023-09-03 11:12:26 · 232 阅读 · 0 评论 -
Windows开发调试纯Linux代码(WSL+Qt+MobaXterm)环境搭建(超详细教程)
在嵌入式环境下开发,板子(设备)上一主要是没有大容量的持久化存储硬件(磁盘/固态盘)。所以,不能安装Qt这种大型的集成开发环境。而且系统也是经过了大幅裁减的,都是为了减少不必要的成本(嵌入式板子的存储成本也是设备成本的一部分),这样就能给其他功能留下一点更多的空间。想必很多同学都想学习Linux环境下的开发,一个是很多纯服务端程序不需要Windows这样的窗口界面。也就是大部分人其实即便工作中要用Linux,也是有使用Windows的需求的。对于这种开发环境来说,QtCreator的支持是非常好的。原创 2023-09-02 17:00:50 · 1549 阅读 · 2 评论